悠悠 发表于 2015-6-25 18:49:04

php递归函数中使用return无法放回值的注意事项

下面是一个递归函数,列出当前类别上机的所有类别。

function list_class($table,$id,$name,$pid,$url,$str){
      $url2 = str_replace("{CID}",$id,$url);
      $str2 = ' >> <a href="'.$url2.'">'.$name.'</a> ' . $str;
      $sql2 = "select * from {$table} where id = ".$pid;
      $result2 = mysql_query($sql2);
      if($row2 = mysql_fetch_assoc($result2)){
            $this->list_class($table,$row2["id"],$row2["name"],$row2["pid"],$url,$str2);
      } else {
            return $str2;
      }
    }

上面这个函数看起来是没有什么问题的,不运行一下根本不知道他会有错误,return是无法返回值,。

正确的方式如下:
function list_class($table,$id,$name,$pid,$url,$str){
      $url2 = str_replace("{CID}",$id,$url);
      $str2 = ' >> <a href="'.$url2.'">'.$name.'</a> ' . $str;
      $sql2 = "select * from {$table} where id = ".$pid;
      $result2 = mysql_query($sql2);
      if($row2 = mysql_fetch_assoc($result2)){
            return $this->list_class($table,$row2["id"],$row2["name"],$row2["pid"],$url,$str2);
      } else {
            return $str2;
      }
    }

只是在函数前面加了个return,这个递归函数就可以正常返回值了。

悠悠 发表于 2015-8-5 01:24:32

不返回值的时候,也可以不加。
页: [1]
查看完整版本: php递归函数中使用return无法放回值的注意事项