对于这个时髦的标题感到抱歉,我遇到了一个问题。首先,我设法解决了我的问题(撕掉我的代码之后),但我不知道为什么我的解决方案有效,我正在尝试将其视为一种学习体验。
我有一个从db收集信息的类。此类跟踪索引值,以便调用函数可以一次抓取一个结果。所以我的班级代码最初包含......
protected $index = NULL;
protected $array = array(stuff);
public function next_item()
{
if($this->index == NULL)
{//first time called
$this->index = 0;
}
else
{
$this->index++;
}
if($this->index < sizeof($this->array))
{
return TRUE;
}
return FALSE;
}
public function get_result()
{
return $this->array[$this->index];
}
调用函数有类似于
的东西 while($myclass->next_item()){
echo $myclass->get_result();
}
当然,它涉及的内容要多得多,但这是问题代码(你明白了)。这段代码在我的项目中引发了一个无限循环(或一个外观)。我通过将$ index初始化为-1并删除条件检查null来修复我的问题。所以它现在......
protected $index = -1;
public function next_item()
{
$this->index++;
if($this->index < sizeof($this->array))
{
return TRUE;
}
return FALSE;
}
我的问题是,为什么这样做?当我检查时,索引从未在数组中引用,而它是NULL。始终在调用NULL的条件检查之后,发生了0的赋值。
我非常感谢你的时间,提前。试着把它变成一种学习体验,如果我理解为什么它有效,那就更好了,不仅如此。
如果这个问题在其他地方得到解答,我很抱歉,我无法弄清楚如何标记我的问题(如你所见),更不用说找到以前的答案了。
欢呼声, -David
答案 0 :(得分:3)
您的问题是由PHP中的0 == NULL
引起的。因此,当您在每次拨打0
时反复将其设置为0
时,将索引设置为next_item
时,this->index == NULL
将始终为真。
将测试更改为this->index === NULL
也可以解决您的问题。请参阅this question,其中介绍了PHP中==
和===
之间的区别。