为什么有些人在if语句中将值放在变量之前?

时间:2014-08-27 02:59:46

标签: php if-statement comparison

例如,与$ variable === true?

的不同之处
<?php

if (true === $variable) {
     //
}

if (1 === intval($variable)) {
    //
}

5 个答案:

答案 0 :(得分:12)

它们是等价的。

有些程序员更喜欢这种“Yoda风格”,以避免意外写作的风险:

if ($variable = true) {
    // ...
}

,相当于

$variable = true;
// ...

,当他们打算写

if ($variable === true) {
    // ...
}

(而if (true = $variable)会产生明显的错误,而不是潜在的微妙错误。)

答案 1 :(得分:7)

简短回答

有些人这样做是为了避免在真正意图使用比较运算符(===)时错误地使用赋值运算符(===)。

答案很长

在PHP中,有3个操作符可能会被误认为是其他操作符:

  • =是赋值运算符
  • ==是“等于”运算符
  • ===是“相同的”运算符

第一个运算符仅用于为变量赋值。第二个和第三个仅用于比较两个值或表达式。

在PHP中,可以为控件结构内的变量赋值(ifforwhile等。如果你不小心,这可能会导致问题。例如,如果要将$a与布尔值进行比较,可以这样做:

if ($a == false) // or
if ($a === false)

但是,如果你不小心,它可能最终会像这样:

if ($a = false)

...这是完全合法的代码,但它是一项任务,最终会导致问题。它会导致问题的原因是因为表达式$a=false将被评估,并且代码将继续运行,就好像没有任何错误,而事实上它并不是故意的。

有些人在操作数之间切换时,将值与文字进行比较(固定值,如truefalse75.2等等on),是因为无法为文字赋值。例如:

if (false = $a)

...会导致错误,告诉程序员他们犯了错误,然后他们可以修复。

答案 2 :(得分:3)

我想这只是一般的思维方式。当你真的想到一个深刻的if语句时,你会想到这个陈述是否属实,而不是另一个观点。这没有错,但在我的脑袋里反过来,会让我烦恼,让我对这句话失去注意力。所以我会说这只是人们的想法:D。

答案 3 :(得分:2)

($var === true)(true === $var)之间没有区别。它们是等价的。

请参阅http://php.net/manual/en/types.comparisons.php以获取完整的比较表。你会发现所有等效的比较都有相同的结果。

答案 4 :(得分:0)

此外,有些人更喜欢在语句之前查看被评估的结果。 有些陈述可能更长,更难阅读。

例如:

if (false == (new DataParser()->makeAComplexDataParser((new SomeTransformer()->doTransformation((new someClass()->getMethodOfLongParameters($param1, $param2, (new Date()->format('Y-m-d'))))))))  ) {
    // do stuff
}

因此最好考虑“这个复杂的表达是否虚假?”而不是思考 “这个复杂的表达式是....嗯......假?”