令人费解的 php 递归

Posted

技术标签:

【中文标题】令人费解的 php 递归【英文标题】:Puzzling recursion with php 【发布时间】:2012-10-31 22:17:58 【问题描述】:

我将此代码与 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 时才会停止。这是为什么呢?

【问题讨论】:

【参考方案1】:

我认为您想在您的情况下使用&amp;&amp; 而不是||

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

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

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

【讨论】:

它没有工作.. 它在第一次迭代时退出 //.. 当日期为 0 时【参考方案2】:

它可能不会停止,因为当 $date1 不是 0 时,您的 $this-&gt;counter 仍然是 &lt; 5。如果您查看这些语句的 true/false 值,您的 while 条件变为:

while( false || true )

$this-&gt;counter&lt; 5 并且对于$date 的任何值,这将使执行继续。

你可能想把它切换到

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

使用&amp;&amp;,因为您希望两个条件都是true,而不仅仅是一个。在将日期与0 进行比较时,还将!= 切换为==,因此当您有非0 日期时它也会停止。

【讨论】:

好的,我用了这个:while( strlen($date1)counter

以上是关于令人费解的 php 递归的主要内容,如果未能解决你的问题,请参考以下文章

令人费解的题目(Noip2006)

python 具有FTP服务器验证功能的令人敬畏的递归下载程序

UITableViewCell 中令人费解的 UIImageView 行为

令人费解的作用域行为

Iphone AddSubView 功能上令人费解的错误

.NET:RsaCryptoServiceProvider 中令人费解的加密异常