2

この関数は、$alias が 2 回目の再帰で値を持っている間は NULL を返します。最初の呼び出しでは必要な値を返しますが、最初に一致しなかった場合は $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);
        } 
    }
4

2 に答える 2

12

再帰呼び出しの結果を返すのを忘れました:

return $this->checkAlias($result_string);
于 2013-09-16T12:22:00.347 に答える
3

前に return キーワードを忘れた$this->checkAlias($result_string);

コードを次のように変更します。

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ステートメントに到達し、2回目に実行されると、ifステートメントに入るからです。if は値を返しますが、else では何もしないので、それを返すと値が得られます。

ステファン

于 2013-09-16T12:22:50.367 に答える