php - PHP 本身支持合取和析取吗?

标签 php javascript

Javascript 使用合取和析取运算符。

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

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

最佳答案

PHP 支持短路求值,与 JavaScript 的连词略有不同。我们经常看到使用短路评估来测试 PHP 中 MySQL 查询结果的示例(即使这不是一个好的做法):

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

请注意,在 PHP 中,当 bool 运算符两侧都有要计算的表达式时,短路计算会起作用,这会产生返回值。然后,仅当左侧为 false 时,它​​才执行右侧。这与 JavaScript 不同:

简单地做:

$a || $b

如果其中一个为真或两者都为假,则返回 bool 值TRUEFALSE。如果$a为假,它不会返回$b的值:

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

echo $a || $b;
// Prints "1", not  "I'm b"

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

在 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;

关于php - PHP 本身支持合取和析取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10029360/

相关文章:

javascript - 为什么 boolean 值在跳出函数后会发生变化?

javascript - 如何将闭包与函数指针一起使用?

javascript - if 语句在条件失败时运行并与窗口滚动事件绑定(bind)

javascript - 了解 javascript 的范围界定 - 通过一个简单的 Backbone 示例

php - 使用 smarty php 打印链接

javascript - PHP Ajax jQuery跨域文件加载

php - UPLOAD_ERR_INI_SIZE 错误,但 post_max_size 和 upload_max_filesize 值看起来正确

date - 我如何转换 yyyy-MM-ddThh :mm:sszzz to timestamp with php?

php - 表达式的开头或结尾没有句点?

javascript - 为什么我的加载程序仅适用于 Firefox?