$ foo === TRUE和TRUE === $ foo有什么区别?

时间:2013-12-13 15:40:00

标签: php boolean

我确实理解,在以下代码中......

$foo = TRUE;
$bar = 1;

if ($foo === TRUE)
{
    echo 'Foo';
}

if ($bar === TRUE)
{
    echo 'Bar';
}

...只会因类型比较而打印Foo。

但是,我的问题是......

if ($foo === TRUE)
{
    echo 'Foo1';
}
if (TRUE === $foo)
{
    echo 'Foo2';
}

...因为据我所知,它们是相同的,但我记得在某个地方读过它们不是。我只是在梦想有关PHP的奇怪内容,还是实际上有区别?

谢谢!

2 个答案:

答案 0 :(得分:6)

它是一样的 - 只有当你把$ foo放在右边时,当你只使用一个“=”符号时,你可以避免那个可怕的错误。所以使用“左对比”是一个很好的做法。考虑一下:

//  These 4 lines intended for the same check
//  Notice the subtle differences!

    if("secret_thing" =  $password) {...}   // you get an error but that's it
    if("secret_thing" == $password) {...}   // this is perfect
    if($password == "secret_thing") {...}   // this is acceptable
    if($password =  "secret_thing") {...}   // you're deep in trouble, friend!

//

左边是文字,最糟糕的事情就是你得到一条错误信息。没什么大不了。右边是文字(还有一个小错字),窃贼就在你的起居室里。

实际上,这个错字非常容易,例如,如果你使用Pascal / Delphi / Lazarus,你有':='进行分配,简单的'='表示比较。当你这样做时,没有任何警报; PHP会认为他理解你。

TLDR:这是一个安全措施。

附注:您还可以使用比较功能来提高可读性。但是那个需要额外的微秒,所以在高性能的情况下,只需坚持使用旧的“==”/“===”符号。

答案 1 :(得分:3)

它们两者完全相同

它们完全相同;)