Php递归函数返回null,而变量有值

时间:2013-09-16 12:17:52

标签: php recursion

此函数返回NULL,而$ alias在第二次递归中具有值。 在第一次调用时,它返回所需的值,但是如果第一次调用不匹配,则首先在$ alias变量中以可用的值递归所需的值,但它不会返回任何值。

public function checkAlias($fname='',$lname=''){

        if(!empty($fname)){
        $fname = mysql_real_escape_string($fname);
        }
        if(!empty($lname)){
        $lname = mysql_real_escape_string($lname);
        }

    $alias = strtolower($fname).strtolower($lname);
    $sql = "Select ALIAS from table where ALIAS = '$alias'";
    $query = mysql_query($sql);
    $row = mysql_fetch_row($query);
    $string_length = strlen($alias) - 1;
    $result_string = substr($alias,0,$string_length);

    if(!$row){
            print $alias;   // is printing value 
        return $alias;  // but here it returns null
    }else{
        $this->checkAlias($result_string);
        } 
    }

2 个答案:

答案 0 :(得分:5)

您忘记返回递归调用的结果:

return $this->checkAlias($result_string);

答案 1 :(得分:3)

您在$this->checkAlias($result_string);

之前忘记了return关键字

将您的代码更改为:

public function checkAlias($fname='',$lname=''){

        if(!empty($fname)){
        $fname = mysql_real_escape_string($fname);
        }
        if(!empty($lname)){
        $lname = mysql_real_escape_string($lname);
        }

    $alias = strtolower($fname).strtolower($lname);
    $sql = "Select ALIAS from table where ALIAS = '$alias'";
    $query = mysql_query($sql);
    $row = mysql_fetch_row($query);
    $string_length = strlen($alias) - 1;
    $result_string = substr($alias,0,$string_length);

    if(!$row){
            print $alias;   // is printing value 
        return $alias;  // but here it returns null
    }else{
        return $this->checkAlias($result_string);
        } 
    }

因为第一次代码将到达else语句,并且第二次运行它将进入if语句。 if返回值,但是在else中你没有对它做任何事情,所以返回它然后你得到你的价值。

的Stefan