PHP IF中的比较顺序

PHP IF中的比较顺序,php,if-statement,comparison,Php,If Statement,Comparison,我很确定这两者之间没有区别 if ($value === true) 还有这个 if (true === $value) 对我来说,这似乎总是令人困惑。我曾经认为这是一种“新开发人员的糟糕的非传统风格”。此外,我的老板告诉我永远不要做这种事 但今天,我浏览了由创建并查看(第341行)的人编写的源代码 我相信像乔希·洛克哈特这样的人不会做这样的事,如果这被认为是一种坏习惯的话。那么这个订单是怎么回事?这是一种古老的传统吗?这被通俗地称为。使用它们背后的原因是人们有时会犯错。在if语句的上下文中

我很确定这两者之间没有区别

if ($value === true)
还有这个

if (true === $value)
对我来说,这似乎总是令人困惑。我曾经认为这是一种“新开发人员的糟糕的非传统风格”。此外,我的老板告诉我永远不要做这种事

但今天,我浏览了由创建并查看(第341行)的人编写的源代码


我相信像乔希·洛克哈特这样的人不会做这样的事,如果这被认为是一种坏习惯的话。那么这个订单是怎么回事?这是一种古老的传统吗?

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

if($value = 42)
请注意,没有双等号(
==
)。这是一条有效语句,不是语法错误。它可能会对随后的代码造成巨大的破坏,而且很难快速识别。Yoda条件通过反转条件表达式来解决此问题:

if(42 = $value)
这不是一个有效的语句,而且是一个语法错误,通常会报告这些错误并包含行号,因此很容易找到它们

“您有语法错误。第73行必须执行其他操作。”--可能是尤达的编译器

你是否真的认为它们是好是坏取决于个人喜好和风格。在一些流行框架中(例如),Yoda条件实际上是官方编码标准的一部分。对它们的主要批评是,对一些人来说,它们降低了代码的可读性,却没有提供任何真正的主要好处

正如@MonkeyZeus在对该问题的评论中指出的,有时人们实际上是想在
if
条件中只使用一个等号:

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

因为,在这种情况下(以及在最初的意外情况下),由
if
条件计算的值是碰巧被赋值的值。

有些人宁愿将文字放在第一位,以防止意外赋值,而不是检查是否相等。@Rizier123,谢谢,我从来没听说过这个名字。我觉得对你觉得奇怪的事情提出质疑是件好事。我不是指这个特定的事情或任何特定的人,但总的来说,有些人似乎应该知道他们在做什么,这并不意味着他们正在做的奇怪的事情是一个好主意。“坏习惯”可能是一个非常主观的术语,并且会因代码库而异。我知道这被称为“Yoda条件”,但我想在表中说明一些情况,因为这可能是故意以这种方式编写的
if()
,以实现某种类型的杂耍顺序。唯一可靠的答案将来自这行代码的作者,这里的一切都是猜测。伟大的答案。为此,你应该获得金牌。:-)
if($iMustHaveAValue = functionCallThatCanFail()) {
    // Rest assured, $iMustHaveAValue has a truthy value.
}