用PHP令人费解的递归

时间:2012-11-12 13:30:09

标签: php recursion while-loop conditional-statements

我在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 ");

基本上,循环应该继续,直到$datenot 0counter不大于5。有时date10但有时却没有。如果不是,它应该在while评估中返回,并停止迭代。但它没有这样做,迭代仍在继续。

它只会在计数器达到5时停止。为什么会这样?

2 个答案:

答案 0 :(得分:3)

我认为您希望在您的情况下使用&&而不是||

你编写它的方式如果任何一个条件为真,它将继续运行,所以只有当它们都是假时它才会停止。

编辑:在仔细阅读您的问题后,我认为您需要使用

while (0 == $date1 && $this->counter < 5 ) {

答案 1 :(得分:2)

由于$this->counter< 5不是$date10仍为true/false,因此可能无法停止。如果您在while值中查看这些语句,则while( false || true ) 条件将变为:

$this->counter

虽然< 5$date,但while( 0==$date1 && $this->counter<5 ) 的任何值都会导致执行继续。

您可能希望将其切换为

&&

使用true,因为您希望两个条件都是!=,而不只是一个。{1}}。在将日期与==进行比较时,也会将0切换为{{1}},以便在您拥有非0日期时也会停止。