谁能帮我看看下面这一段代码,为什么出错啦!function diGui() {
    $a = intval( $a );
    $a++;
    if ( $a <= 3 ) {
     return diGui();
    }
    return $a;
}
echo diGui();
php递归函数里的变量在下一次调用函数本身的时候也可以使用吗?会不会有作用域的问题?

解决方案 »

  1.   

    如下改,能运行$a有作用域的问题
    function diGui($a) {
      $a = intval( $a );
      $a++;
      if ( $a <= 3 ) {
      return diGui($a);
      }
      return $a;
    }
    echo diGui(1);
      

  2.   


    <?php
     $a=4;
    function diGui($value) {
      
      echo $value;  if ($value==0) {
      return "end";
       
      }
      else
    {
       return diGui($value-1);
    }
    }
    echo diGui($a);?>
      

  3.   


    一楼这个不错,其实我本来是想详细了解递归函数的用法,对递归函数里变量的作用域不是很明白。
    应该跟普通函数差不多咯。假如是下面一段代码呢?(错误貌似很多)function dirSize( $path ) {
    //    static $dir_size;
        $dir_size = floatval( $dir_size );
        if ( is_dir( $path ) ) {
            $dirHandle = opendir( $path );
            while ( ( $dirRead = readdir( $dirHandle ) ) !== false ) {
             if ( $dirRead != '.' && $dirRead != '..' ) {
             if ( is_dir( $dirRead ) ) {
             $path .= "/$dirRead";
             closedir( $dirHandle );
             dirSize( $path );
             }elseif ( is_file( $dirRead ) ) {
             $path .= "/$dirRead";
             $dir_size += filesize( $path );
             $dir_size = round( $dir_size/1024, 2 ).'KB';
                        closedir( $dirHandle );
             }
             }
            }
        }
        return $dir_size;
    }echo dirSize( 'files' );
      

  4.   

    不是差不多,而是一样的。
    函数里定义的变量,只在该函数中有效你 #3 的代码中的 dirSize( $path ); 的返回值被抛弃了,所以你不可能得到正确的结果