我在php中使用这段代码:
while (0 != $date1 || $this->counter < 5 ) {
// if ($this->true_cahce_failure ) {
$this->url= $this->adjust_url_with_www_add($this->url);
// $this->counter=2;
// }
$this->cache_debug("Date".$date1." ".$this->url,"Recursion ".$this->counter);
$date1 = $this->get_date();
$this->counter++;
}
$this->cache_debug("Date: ".$date1." ".$this->url,"Loop Done ");
基本上,循环应该继续,直到$date
为not 0
或counter
不大于5
。有时date1
已0
但有时却没有。如果不是,它应该在while评估中返回,并停止迭代。但它没有这样做,迭代仍在继续。
它只会在计数器达到5时停止。为什么会这样?
答案 0 :(得分:3)
我认为您希望在您的情况下使用&&
而不是||
。
你编写它的方式如果任何一个条件为真,它将继续运行,所以只有当它们都是假时它才会停止。
编辑:在仔细阅读您的问题后,我认为您需要使用
while (0 == $date1 && $this->counter < 5 ) {
答案 1 :(得分:2)
由于$this->counter
在< 5
不是$date1
时0
仍为true/false
,因此可能无法停止。如果您在while
值中查看这些语句,则while( false || true )
条件将变为:
$this->counter
虽然< 5
为$date
,但while( 0==$date1 && $this->counter<5 )
的任何值都会导致执行继续。
您可能希望将其切换为
&&
使用true
,因为您希望两个条件都是!=
,而不只是一个。{1}}。在将日期与==
进行比较时,也会将0
切换为{{1}},以便在您拥有非0日期时也会停止。