【问题标题】:PHP && Short-circuit Evaluation OperatorPHP && 短路求值运算符
【发布时间】:2020-05-09 08:55:35
【问题描述】:

在 JavaScript 中,我可以做到:

console.log( 'a' || 'b' ); // Prints 'a'

在 PHP 中,等价于:

echo 'a' ?: 'b'; // Prints 'a'

在 JavaScript 中:

console.log( 'a' && 'b' ); // Prints 'b'

我的问题是,JavaScript 的 'a' && 'b' 的 PHP 等价物是什么?

如果我在 PHP 中执行以下操作:

echo 'a' && 'b'; // Prints 1

如您所见,它将类型转换为布尔值 1 (true)。

什么是 PHP 运算符,可以让我得到实际值,比如 JavaScript 的 &&?

附:我知道三元语句,请不要这么建议。

【问题讨论】:

  • 如果你不想要三元,那么上面的方法在 PHP 中不起作用,那么这里没有选项。
  • 您发布的 JavaScript 正在滥用 JavaScript 的类型杂耍功能,不应在生产代码中使用,因为“逻辑上”布尔运算符应计算为布尔值 - 事实上 JavaScript 携带原始值,同时假装它是布尔值是 JavaScript 独有的一个怪癖,在其他语言中基本上不存在。
  • PHP 中的逻辑运算总是返回布尔值,你不能在 PHP 中使用这个表达式有相同的行为,你必须通过代码来完成,使用 if 语句或 ternary @987654321 @

标签: php short-circuiting


【解决方案1】:

&& 是一个逻辑运算符,它的计算结果为true | false。 PHP 中有一个稍微不同的运算符,名为 null coalesce operator。它表示为??。它评估第一个操作数是否为null。如果是null,则结果是语句的第二个操作数。

$variable = 'String';
return $variable ?? 'default'; // results in 'String'

$variable = null;
return $variable ?? 'default'; // results in 'default'

关于运营商的更多信息:https://wiki.php.net/rfc/isset_ternary

【讨论】:

  • 这个很接近,但它只适用于NULL。 PHP中是否有类似的运算符可以处理所有虚假值?例如,-1、“”等
猜你喜欢
  • 1970-01-01
  • 2018-06-14
  • 2014-07-31
  • 2012-02-04
  • 2019-02-04
  • 2021-10-27
相关资源
最近更新 更多