编辑:更清晰
我遇到一个变量在函数调用之间消失的问题
首先我从这里开始,$ pid是一个取自JSON字符串的int
print "PID".$pid."\n";
$a['points'] = Algorithm::getpredictionForPlayer($pid);
我得到输出'PID12',它应该是
在Algorithm :: getpredictionForPlayer中接下来
static function getpredictionForPlayer($pid)
{
print "PID2: ".$pid."\n";
$points =0;
for ($i = 0; $i < 10; $i++)
{
print "algorithm: ".$pid."\n";
$points += v4::predictPointsForPlayer($pid);
}
return intval($points/10);
}
偶尔我会得到'PID2:12',但更常见的是所有打印都是'PID2:' 在这段时间内,变量是否会消失?
答案 0 :(得分:0)
您在全局范围内的变量是$ pid,但您将$ player_id传递给函数
print "PID".$pid."\n";
$a['points'] = Algorithm::getpredictionForPlayer($player_id);
然后,您的静态方法中有一个名为$ pid
的参数static function getpredictionForPlayer($pid)
但这与全局范围中的变量不同。实际上,这将与您传入的$ player_id具有相同的值。如果您希望全局范围内的$ pid变量存在于静态方法中,则应将其传递给而不是$ player_id。
不过,你应该考虑一下你是否真的需要静态方法。通常它们会使测试变得困难,如果可能的话应该避免。你有玩家对象并在那上面调用方法getPrediction()吗?答案 1 :(得分:0)
更改此行:
$a['points'] = Algorithm::getpredictionForPlayer($player_id);
对此:
$a['points'] = Algorithm::getpredictionForPlayer($pid);