gpt4 book ai didi

php - PSR-2 PHP 三元语法中是否需要括号?

转载 作者:可可西里 更新时间:2023-10-31 23:05:34 26 4
gpt4 key购买 nike

问题:PSR-2 PHP 三元语法中是否需要括号?

寻找以下三元语句语法中的哪一个(如果有的话)符合 PSR-2 - 我还需要指向文档或一些权威链接:

$error = ($error_status) ? '错误' : '没有错误';

$error = $error_status ? '错误' : '没有错误';


注意: php.net它显示了带括号的语法,但我无法在任何“官方 PSR-2”文档中找到它。


结论

如果没有关于此的 PSR-2 标准,哪种方式是最常见的约定?

最佳答案

The PSR-2 standard特别省略对运营商的任何意见:

There are many elements of style and practice intentionally omitted by this guide. These include but are not limited to: ... Operators and assignment

由于括号用于对表达式进行分组,因此您的示例没有多大意义:

$error = ($error_status) ? 'Error' : 'No Error';

此处将单个变量括在括号中没有任何意义。更复杂的条件可能会受益于括号,但在大多数情况下,它们只是为了提高可读性。

一个更常见的模式是始终包围整个三元表达式:

$error = ($error_status ? 'Error' : 'No Error');

这样做的主要动机是 PHP 中的三元运算符具有相当笨拙的关联性和优先级,因此在复杂表达式中使用它通常会产生意想不到的/无用的结果。

常见的情况是字符串连接,例如:

$error = 'Status: ' . $error_status ? 'Error' : 'No Error';

此处连接(. 运算符)实际上在三元运算符之前求值,因此条件始终为非空字符串(开始 'Status: '),你将始终得到字符串 Error' 作为结果。

括号是防止这种情况所必需的:

$error = 'Status: ' . ($error_status ? 'Error' : 'No Error');

当“堆叠”三元表达式以形成 if-elseif 链的等价物时,存在类似的情况,因为 PHP 历史早期的一个错误意味着多个三​​元运算符是按从左到右的顺序计算的,而不是将整个假分支缩短当条件为真时。

来自 the PHP manual 的示例更清楚地解释这一点:

// on first glance, the following appears to output 'true'
echo (true?'true':false?'t':'f');

// however, the actual output of the above is 't'
// this is because ternary expressions are evaluated from left to right

// the following is a more obvious version of the same code as above
echo ((true ? 'true' : false) ? 't' : 'f');

// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.

关于php - PSR-2 PHP 三元语法中是否需要括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26389123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com