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

Jor*_*eno 3 javascript php

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

如果它可以被计算为:false,则返回左操作数:在结合(a && b)的情况下为false,或者在析取(a || b)的情况下为true; 否则返回右操作数.

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

Mic*_*ski 10

PHP支持短路评估,与JavaScript的结合略有不同.我们经常看到使用短路评估来测试PHP中MySQL查询结果的示例(即使不是很好的做法):

// mysql_query() returns false, so the OR condition (die()) is executed.
$result = mysql_query("some faulty query") || die("Error");
Run Code Online (Sandbox Code Playgroud)

请注意,当在PHP中存在要在布尔运算符的任一侧进行求值的表达式时,短路评估将起作用,这将产生返回值.然后只有在左侧为假时才执行右侧.这与JavaScript不同:

简单地做:

$a || $b
Run Code Online (Sandbox Code Playgroud)

将返回一个布尔值,TRUE或者FALSE如果其中任何一个是真的或两者都是假的.它不会返回$bif $a为falsy 的值:

$a = FALSE;
$b = "I'm b";

echo $a || $b;
// Prints "1", not  "I'm b"
Run Code Online (Sandbox Code Playgroud)

因此,为了回答这个问题,PHP将对这两个值进行布尔比较并返回结果.它不会返回两者的第一个真值.

在PHP中更具惯用性(如果存在惯用的PHP这样的东西)将使用三元操作:

$c = $a ? $a : $b;

// PHP 5.3 and later supports
$c = $a ?: $b;
echo $a ?: $b;
// "I'm b"
Run Code Online (Sandbox Code Playgroud)

PHP 7的更新

PHP 7引入??空合并运算符,它可以作为更接近于连词的近似值.它特别有用,因为它不需要您检查isset()左操作数的数组键.

$a = null;
$b = 123;
$c = $a ?? $b;
// $c is 123;
Run Code Online (Sandbox Code Playgroud)

  • Javascript:`"first"||"second"`返回""first"`而PHP`echo("first"||"second")`将返回`1`.PHP不返回左或右操作数,只返回布尔值.PHP本身是否支持返回实际操作数的能力是我想知道的. (2认同)