【发布时间】:2013-08-29 19:27:27
【问题描述】:
我有以下代码在生产中似乎导致了无限循环。
$z=1;
while (!$apns = $this->getApns($streamContext) && $z < 11)
{
myerror_log("unable to conncect to apple. sleep for 2 seconds and try again");
$z++;
sleep(2);
}
如何应用导致此行为的优先规则?
http://php.net/manual/en/language.operators.precedence.php
我在文档中看到了这个注释:
虽然 = 的优先级低于大多数其他运算符,但 PHP 会 仍然允许类似于以下的表达式: if (!$a = foo()), in 这种情况下 foo() 的返回值被放入 $a 中。
这让我认为应该首先评估 =。然后!然后是&&,不会导致死循环。
【问题讨论】:
-
您的意思是在 while 循环中使用
==(比较)而不是=(赋值)吗? -
不,那句话真的只是意味着
=左边的!是有效的。&&仍然是分配值的一部分。 -
也:没有。坏的。不要这样编码。太可怕了。
-
添加一些括号总是一个好主意,这样代码就清晰了,没有这些问题...
-
我知道代码很糟糕......它甚至不是我的。但这个问题很有趣。我这里有一个无限循环。为什么?
标签: php operators operator-precedence