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

2022-08-30 23:09:15

例如,与$variable ===true 有什么不同?

<?php

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

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

答案 1

它们是等效的。

一些程序员更喜欢这种“尤达风格”,以避免意外写入的风险:

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

,这等效于

$variable = true;
// ...

,当他们打算写

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

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


答案 2

简短的回答

有些人这样做是为了避免错误地使用赋值运算符(),而实际上他们打算使用比较运算符( 或 )。======

长答案

在 PHP 中,有 3 个运算符可能相互混淆:

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

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

在 PHP 中,可以将值赋给控制结构(、 、 等) 内的变量。如果您不小心,这可能会导致问题。例如,如果要与布尔值进行比较,可以按如下方式操作:ifforwhile$a

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

但是,如果您不小心,它可能会像这样结束:

if ($a = false)

...这是完全合法的代码,但它是一项任务,最终会引起问题。它会导致问题的原因是,表达式 , 将被计算,代码将继续运行,就好像没有问题一样,而实际上它不是有意的。$a=false

当将值与文本(固定值,如 、 、 、 等)进行比较时,有些人会切换操作数的原因是,无法为文本赋值。例如:truefalse75.2

if (false = $a)

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


推荐