例如,与$ variable === true?
的不同之处<?php
if (true === $variable) {
//
}
if (1 === intval($variable)) {
//
}
答案 0 :(得分:12)
它们是等价的。
有些程序员更喜欢这种“Yoda风格”,以避免意外写作的风险:
if ($variable = true) {
// ...
}
,相当于
$variable = true;
// ...
,当他们打算写
时if ($variable === true) {
// ...
}
(而if (true = $variable)
会产生明显的错误,而不是潜在的微妙错误。)
答案 1 :(得分:7)
简短回答
有些人这样做是为了避免在真正意图使用比较运算符(=
或==
)时错误地使用赋值运算符(===
)。
答案很长
在PHP中,有3个操作符可能会被误认为是其他操作符:
=
是赋值运算符==
是“等于”运算符===
是“相同的”运算符第一个运算符仅用于为变量赋值。第二个和第三个仅用于比较两个值或表达式。
在PHP中,可以为控件结构内的变量赋值(if
,for
,while
等。如果你不小心,这可能会导致问题。例如,如果要将$a
与布尔值进行比较,可以这样做:
if ($a == false) // or
if ($a === false)
但是,如果你不小心,它可能最终会像这样:
if ($a = false)
...这是完全合法的代码,但它是一项任务,最终会导致问题。它会导致问题的原因是因为表达式$a=false
将被评估,并且代码将继续运行,就好像没有任何错误,而事实上它并不是故意的。
有些人在操作数之间切换时,将值与文字进行比较(固定值,如true
,false
,7
,5.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
}
因此最好考虑“这个复杂的表达是否虚假?”而不是思考 “这个复杂的表达式是....嗯......假?”