PHP本身是否支持连接和析取?

时间:2012-01-30 14:15:28

标签: php javascript

Javascript使用连接和析取运算符。

如果可以将其评估为:false,则返回左操作数:在结合(a&& b)的情况下为false,或者在析取(a || b)的情况下为true;否则返回右操作数。

PHP中是否存在等效运算符?

1 个答案:

答案 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
如果其中任何一个是真实的或两者都是假的,那么

将返回一个布尔值TRUEFALSE。如果$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的更新

PHP 7引入了the ?? null coalescing operator,它可以更接近于连接。它特别有用,因为它不要求您检查左操作数组的数组键isset()

$a = null;
$b = 123;
$c = $a ?? $b;
// $c is 123;