Javascript使用连接和析取运算符。
如果可以将其评估为:false,则返回左操作数:在结合(a&& b)的情况下为false,或者在析取(a || b)的情况下为true;否则返回右操作数。
PHP中是否存在等效运算符?
答案 0 :(得分:10)
PHP支持短路评估,与JavaScript的结合略有不同。我们经常看到使用短路评估来测试PHP中MySQL查询结果的例子(即使这不是一个好习惯):
// mysql_query() returns false, so the OR condition (die()) is executed.
$result = mysql_query("some faulty query") || die("Error");
请注意,在PHP中,当在布尔运算符的任一侧存在要计算的表达式时,短路评估将起作用,这将产生返回值。只有当左侧为假时,它才会执行右侧。这与JavaScript不同:
简单地做:
$a || $b
如果其中任何一个是真实的或两者都是假的,那么将返回一个布尔值TRUE
或FALSE
。如果$b
是假的, NOT 会返回$a
的值:
$a = FALSE;
$b = "I'm b";
echo $a || $b;
// Prints "1", not "I'm b"
因此,为了回答这个问题,PHP将对这两个值进行布尔比较并返回结果。它不会返回两者的第一个真值。
在PHP中更具惯用性(如果存在惯用PHP这样的东西)将使用三元操作:
$c = $a ? $a : $b;
// PHP 5.3 and later supports
$c = $a ?: $b;
echo $a ?: $b;
// "I'm b"
PHP 7引入了the ??
null coalescing operator,它可以更接近于连接。它特别有用,因为它不要求您检查左操作数组的数组键isset()
。
$a = null;
$b = 123;
$c = $a ?? $b;
// $c is 123;