3

我将此代码与 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 0counter不大于5. 有时date10但有时没有。如果不是,它应该在 while 评估中返回,并停止迭代。但它没有这样做,迭代继续。

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

4

2 回答 2

3

我认为你想&&在你的条件下使用而不是||.

如果任一条件为真,您编写它的方式将继续运行,因此只有当它们都为假时才会停止。

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

while (0 == $date1 && $this->counter < 5 ) {
于 2012-11-12T13:32:30.700 回答
2

它可能不会停止,因为你的$this->counteris still < 5when $date1is not 0。如果您查看这些语句的true/false值,您的while条件将变为:

while( false || true )

while$this->counter< 5并且对于 的任何值$date,这将使执行继续。

您可能希望将其切换到

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

使用&&是因为您希望两个条件都是true,而不仅仅是一个。在比较日期时也切换!=到,所以当你有一个非 0 日期时它也会停止。==0

于 2012-11-12T13:33:22.243 回答