2013-09-16 6 views
1

Эта функция возвращает NULL, а $ alias имеет значение во второй рекурсии. В первом вызове оно возвращает требуемое значение, но если первое, если оно не согласовано, и оно сначала перезаписывает требуемое значение в avilable в переменной $ alias, но ничего не возвращает.Рекурсивная функция PHP возвращает значение null, а переменная имеет значение

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); 
     } 
    } 
+3

может быть, вы забыли вернуться до этой строки: '$ this-> checkAlias ​​($ result_string);'? – bwoebi

ответ

4

Вы забыли вернуть результат вызова рекурсии:

return $this->checkAlias($result_string); 
2

Вы забыли возвратную ключевое слово перед $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, а во второй раз он ее выполнит войдет в оператор if. Значение if возвращает значение, но в противном случае вы ничего не делаете с ним, поэтому возвращайте его, и вы получите свое значение.

Стефан

Смежные вопросы