我总是远离stackoverflow的答案和我所做的任何阅读"==="
优于"=="
,因为使用了更严格的比较,并且您不会浪费资源转换值类型以检查匹配。
我可能有一个错误的假设,所以我假设这个问题的一部分是,"我的假设是正确的吗?"
其次,
我特别处理的情况是,我从一个字符串"100"
的形式从数据库中获取数据。
我比较的代码是…
if ($this->the_user->group == 100) //admin
{
Response::redirect('admin/home');
}
else // other
{
Response::redirect('user/home');
}
与
if ( (int) $this->the_user->group === 100) //admin
{
Response::redirect('admin/home');
}
else // other
{
Response::redirect('user/home');
}
或者
if (intval($this->the_user->group) === 100) //admin
{
Response::redirect('admin/home');
}
else // other
{
Response::redirect('user/home');
}
通过手动强制转换或转换是否获得了任何完整性(或性能),以便您可以使用标识('==='
)比较? 在您的特殊情况下,==
是更好的选择。正如您(从您的代码中可以看到)可能已经发现许多数据库函数总是返回字符串,即使您获取的是整数。所以类型严格比较只会使你的代码膨胀。
此外,您还增加了潜在的(我们称之为理论上的)安全风险。例如,(int) '100AB2'
会生成100
。在你的情况下,这可能不会发生,但在其他人可能会。
所以:不要过度使用严格的比较,它并不总是好的。您主要只在模棱两可的情况下才需要它,例如strpos
的返回值。
在==
和===
之间存在性能差异-后者甚至会快两倍,参见相等与相同比较运算符。然而,这个差别太小了,除非代码被执行了数百万次。
这是一个非常小的优化。就我个人而言,我认为这真的不值得。
当你显式地强制转换该值时,你从使用===
时不强制转换该值而获得的任何增强都会丢失。在您的情况下,由于类型对您不重要,您应该只执行==
并完成它。
我的建议是当你需要检查类型时也保留===
-例如0评估为false等等。
任何性能提升都是微乎其微的,除非您连续几天/几个月/几年执行数十亿甚至数万亿次这样的比较。严格比较确实有它的用途,但它在PHP中也有些不正常。PHP是一种弱类型语言,并且(通常)为自动转换/转换值做正确的事情。大多数时候,没有必要做严格的比较,因为PHP会做正确的事情。
但是在某些情况下,例如使用strpos
时,自动转换将失败。strpos将返回'0',如果你正在搜索的指针正好在干草堆的开始,这将被视为FALSE,这是错误的。处理这个问题的唯一方法是通过严格比较。
PHP有一些返回TRUE的WTF松散比较,如:
array() == NULL
0 == 'Non-numeric string'
始终对变量和字符串进行严格比较
$var === 'string'