PSR-2 PHP三元语法中是否需要括号?
问题:PSR-2
PHP三元语法中是否需要括号?
寻找以下三元语句的语法符合PSR-2(如果有) – 我还需要指向文档或某些权限链接: $error =($error_status)? ‘错误’:’没有错误’; 要么 $error = $error_status? ‘错误’:’没有错误’; 注意:php.net它显示括号的语法,但我在任何’官方PSR-2’文档中找不到这个. 结论 如果没有PSR-2标准,哪种方式是最常见的惯例?
The PSR-2 standard明确省略对操作符的任何意见:
由于括号用于对表达式进行分组,因此您的示例没有多大意义: $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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |