PHP 递归函数问题


PHP Recursive function issue

我在使用getNext()函数时遇到问题...

如果isTaken() == true,它确实会更新last,但我不确定它是否调用getNext()函数,因为该函数永远不会返回$next

如果isTaken() == false,则返回$next

有什么想法吗?

function isTaken ($id){
  $sql = "SELECT asset_no FROM tb_asset WHERE asset_no='" . $id . "'";
  $result = mysql_query($sql) or die(mysql_Error());
  if (mysql_num_rows($result)) return true;
  else return false;  
  mysql_free_result($result);
}

function getNext(){
  $sql = "SELECT last FROM app_asset";
  $result = mysql_query($sql) or die (mysql_error());
  $last = mysql_fetch_array($result);
  mysql_free_result($result);
  $next = ++$last['last'];
  if (isTaken($next)){
    $sql = "UPDATE app_asset SET last='" . $next . "'";
    mysql_query($sql) or die (mysql_error());
    getNext();
  } else {  
    return $next;
  }
}

正如Sable Foste指出的那样,你总是需要一个return语句。但是,在您的情况下,看起来您的代码需要修改为

if (isTaken($next)){
    //code
    return getNext();
} else
    return $next;

所以该函数将停止递归并在isTaken($next)为假时返回

您需要将变量传递回函数:

  if (isTaken($next)){
    $sql = "UPDATE app_asset SET last='" . $next . "'";
    mysql_query($sql) or die (mysql_error());
    getNext();
    return $next; // this line added.
  } else {  
    return $next;
  }