我明白,在下面的代码中……
$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的奇怪内容,还是实际上有区别?
谢谢!
解决方法:
它是一样的 – 只有当你把$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:这是一个安全措施.
附注:您还可以使用比较功能来提高可读性.但是那个需要一些额外的微秒,所以在高性能的情况下只需坚持好旧的“==”/“===”符号.
标签:php,boolean
来源: https://codeday.me/bug/20190722/1507915.html