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

前端之家收集整理的这篇文章主要介绍了PSR-2 PHP三元语法中是否需要括号?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题: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.
原文链接:https://www.f2er.com/php/135105.html

猜你在找的PHP相关文章