为什么有些人在if语句中将值放在变量之前?
2022-08-30 23:09:15
例如,与$variable ===true 有什么不同?
<?php
if (true === $variable) {
//
}
if (1 === intval($variable)) {
//
}
例如,与$variable ===true 有什么不同?
<?php
if (true === $variable) {
//
}
if (1 === intval($variable)) {
//
}
它们是等效的。
一些程序员更喜欢这种“尤达风格”,以避免意外写入的风险:
if ($variable = true) {
// ...
}
,这等效于
$variable = true;
// ...
,当他们打算写
if ($variable === true) {
// ...
}
(然而,会产生一个明显的错误,而不是一个潜在的微妙的错误)。if (true = $variable)
简短的回答
有些人这样做是为了避免错误地使用赋值运算符(),而实际上他们打算使用比较运算符( 或 )。=
==
===
长答案
在 PHP 中,有 3 个运算符可能相互混淆:
=
是赋值运算符==
是“等于”运算符===
是“相同于”运算符第一个运算符仅用于为变量赋值。第二个和第三个仅用于将两个值或表达式相互比较。
在 PHP 中,可以将值赋给控制结构(、 、 等) 内的变量。如果您不小心,这可能会导致问题。例如,如果要与布尔值进行比较,可以按如下方式操作:if
for
while
$a
if ($a == false) // or
if ($a === false)
但是,如果您不小心,它可能会像这样结束:
if ($a = false)
...这是完全合法的代码,但它是一项任务,最终会引起问题。它会导致问题的原因是,表达式 , 将被计算,代码将继续运行,就好像没有问题一样,而实际上它不是有意的。$a=false
当将值与文本(固定值,如 、 、 、 等)进行比较时,有些人会切换操作数的原因是,无法为文本赋值。例如:true
false
7
5.2
if (false = $a)
...将导致错误,告诉程序员他们犯了一个错误,然后他们可以修复。