通过调用return函数不能在php中返回2个变量?

时间:2011-05-06 18:38:29

标签: php

第一,我不得不说我不是php专业人员,这是我第一次使用return()。

所以这是代码。 我需要返回false和函数剩余的分钟数。

if(!checkIpn())
    $err[]='you need to wait'.$nresting.'minutes before you send another request';
function checkIpn()
{
    $useripe = 0;  
 if ( isset($_SERVER["REMOTE_ADDR"]) )    {     $useripe = $_SERVER["REMOTE_ADDR"] ; } 
 else if ( isset($_SERVER["HTTP_X_FORWARDED_FOR"]) )    {     $useripe =  $_SERVER["HTTP_X_FORWARDED_FOR"] ; } 
 else if ( isset($_SERVER["HTTP_CLIENT_IP"]) )    {     $useripe =  $_SERVER["HTTP_CLIENT_IP"] ; }


 $query  = "SELECT * FROM table WHERE ip = '$useripe' AND status = 'pending' ORDER BY id ASC"; 
 $result = mysql_query($query) or die(mysql_error());   
 $num_rows = mysql_num_rows($result);  

  if ( $num_rows > 0 ) 
 {  
    $str_today = date("Y-m-d H:i:s"); 
    $i=1; 
    while($row = mysql_fetch_assoc($result)) 
        { 
            $str_start = $row['date'];    
            $str_start = strtotime($str_start);  
            $str_end = strtotime($str_today);    
            $nseconds = $str_end - $str_start;   
            $nminutes = round($nseconds / 60);    
                    if ( $nminutes > 120 ) 
                            { return true; } 
                    else    { 
                            $nresting = 120 - $nminutes;
                            return false; }  
            $i++; 
        } 
 } 
 else { return true; }  

基于Tadeck的回答如下。我这样做了:

$result = checkIpn();
if($result[0]==false)
    $err[]='you need to wait '.$result[1].' minutes before you send another request';
谢谢塔德克。

4 个答案:

答案 0 :(得分:4)

如果要使用单个调用返回两个不同的变量,可以使用以下内容:

return array(true, 0);

return array(true);

在第一种情况下(返回成功时)和

return array(false, $minutes);

在第二种情况下(返回失败)。

然后你可以这样检查:

$result = checkIpn();

if ($result[0]) {
    echo 'Success.';
} else {
    echo 'Failure. Minutes to wait: '.$result[1];
}

我希望这会有所帮助。

修改

如果我理解正确,则返回true或分钟数> 0(大于零)。因此,如果成功,您可以使用此类退货:

return true;

这是在失败的情况下:

return $minutes;

然后您将能够以下列方式在代码中使用它:

$result = checkIpn();

if ($result === true) {
    echo 'Success';
} else {
    echo 'Failure. Minutes to wait: '.$result;
}

我想建议你正确记录这样的函数,这样当它返回整数而不是布尔值时没有人会感到惊讶;)

答案 1 :(得分:2)

您可以返回一个数组而不是布尔值,这允许您返回多个值:

return array('success'=>FALSE, 'nminutes'=>$nminutes);

但作为替代方案,如果函数成功,则可以返回NULL,否则返回分钟数。那么你根本不需要TRUE/FALSE

if ($nminutes > 120)
{
  return NULL;
}
else
{
  return $nminutes;
}

检查成功如下:

if (checkIpn() !== NULL) // you have minutes left
else // no minutes left - your TRUE case.

答案 2 :(得分:1)

您可以返回包含任意数量内容的数组。

答案 3 :(得分:0)

在php中,您可以返回一个数组并使用list()函数来解压缩值。

function myfn() {
    return array(true, 120);
}
...
list($retval, $minutes) = myfn();

这通常是相当糟糕的风格,我建议找到一种方法来完成你需要的1个返回值。