PHP IF

时间:2016-09-02 14:53:35

标签: php if-statement comparison

我很确定这个

之间没有区别
if ($value === true)

和这个

if (true === $value)

对我而言似乎总是令人困惑。我曾经认为这是'非常规的新开发者风格。此外,我的老板告诉我永远不要做这样的事情。

但今天我查看Slim的源代码,由创建PHP: The Right Way的人编写,并看到this (第341行)

if (true === $value) {
    $c['settings'] = array_merge_recursive($c['settings'], $name);
}

我敢肯定像Josh Lockhart这样的人如果被认为是一种不好的做法就不会做这样的事情。这个订单怎么样?这是一种古老的传统吗?

1 个答案:

答案 0 :(得分:6)

这通俗地称为'Yoda Conditions'。他们使用背后的原因是因为有时人们会犯错误。在if语句的上下文中,有时会出现这样一个错误:

if($value = 42)

请注意,没有双等号(==)。这是一个有效的语句,不是语法错误。它可能会导致跟随它的代码造成巨大的中断,并且很难快速识别。尤达条件通过反转条件表达式来解决这个问题:

if(42 = $value)

这是一个有效的语句,并且是语法错误,通常会报告包含行号,因此它们很容易找到。

  

"您遇到语法错误。第73行做你必须做的其他事情。" - 尤达的编译器,可能是

你是否真的认为他们的好坏取决于个人偏好和风格。在一些流行框架(例如Wordpress)的情况下,Yoda条件实际上是官方编码标准的一部分。对他们的主要批评是,对某些人来说,他们会降低代码的可读性,而不会带来任何实际的主要好处。

正如@MonkeyZeus在对该问题的评论中指出的那样,有时候人们确实意味着只在if条件中使用单个等号:

if($iMustHaveAValue = functionCallThatCanFail()) {
    // Rest assured, $iMustHaveAValue has a truthy value.
}

the value of an assignment operation is the value assigned开始,在这种情况下由if条件评估的值(以及在原始情况下是非预期的)是发生的任何值。