为什么Wordpress代码始终具有不常见的" boolean literal ===某些动态表达式"比较部分的顺序?

时间:2015-11-12 21:28:43

标签: php wordpress

我发现Wordpress代码总是采用这种编码方式:

if ( false === ( $value = get_transient( 'value' ) ) ) {
     // this code runs when there is no valid transient set
}

我希望它类似于if ( ( $value = get_transient( 'value' ) ) === false )

Wordpress开发人员是否提到使用此PHP语法的任何原因?应该在某个地方引用这个,但这种语法很难谷歌。

(我觉得这不属于Wordpress网站,因为它与PHP语法更相关。)

2 个答案:

答案 0 :(得分:6)

WordPress网站上有一个解释:

https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#yoda-conditions

这叫做尤达条件;简而言之,这是因为人们很容易将PHP中的赋值运算符与相等运算符混淆,因此给出了一行代码:

if (x = true) 

几乎肯定是一个错字,但不会产生任何错误,因为它是有效的语法。

另一方面:

if (true = x) {

表示您尝试将x的值分配给常量true,PHP会看到并生成错误消息。

因此,这是一种避免PHP让您逃避的一些微妙语法问题的简单方法。

答案 1 :(得分:2)

在C中很常见。 人们使用它来避免意外变量归因,例如:

if ($a == 5);
// Works as intended
if ($a = 5);
// Sets $a to 5


if (5 == $a);
// Works as intended

if (5 == $a);
// Compile Error

人们称之为:尤达条件