第一,我不得不说我不是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';
谢谢塔德克。
答案 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个返回值。