根据 php.net 关于逻辑运算符的网页:
这:
$e = false || true;
操作如下:
$e = (false || true) // If false is true, then $e = false. Otherwise true
这:
$f = false or true;
将如下所示:
($f = false) or true; // $f = false is true, as the assignment succeeded
这:
$foo or $foo = 5;
将如下所示:
$foo or ($foo = 5) // foo = undefined or foo = 5, so foo = 5
对于最后一个,未定义基本上类似于 false,因此 foo 等于 5。
此外,下面是运算符优先级顺序的链接:http://www.php.net/manual/en/language.operators.precedence.php
更新:
好了,现在让我们进入要点。就像我们在使用提取的查询时都知道的那样:
while($row = @mysql_fetch_assoc($result))
我们都知道,虽然循环只在 上执行,因此返回 true。true
$row = @mysql_fetch_assoc($result)
达里克的问题也是如此。
$foo or $foo = 5;
基本上是:
$foo or ($foo = 5);
这基本上是:
$foo = undefined or ($foo = 5); // $foo = 5 actually returns true
这也是
$foo = undefined or true;
正如我之前提到的,undefined = false,因此$foo = 5(因为这是真实的陈述)。
希望大家都能理解。