我总是远离stackoverflow的答案和我已经完成的任何阅读"==="
优于"=="
,因为使用了更严格的比较,并且您不会浪费资源转换值类型为了检查比赛。
我可能会以错误的假设来实现,所以我假设这个问题的一部分是“我的假设是真的吗?”
其次,
我正专门处理一种情况,即我以字符串"100"
的形式从数据库中获取数据。
我正在比较的代码是......
if ($this->the_user->group == 100) //admin
{
Response::redirect('admin/home');
}
else // other
{
Response::redirect('user/home');
}
VS
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');
}
是通过手动转换或转换获得的任何完整性(或性能),因此您可以使用身份('==='
)比较?
答案 0 :(得分:13)
在您的特定情况下,==
是更好的选择。正如您(在代码中可以看到)可能已经发现许多数据库函数将始终返回字符串,即使您获取整数。因此,键入严格比较实际上只会使您的代码膨胀。
此外,您正在添加潜在的(让我们称之为理论上)安全风险。例如。 (int) '100AB2'
会产生100
。在你的情况下,这可能不会发生,但在其他情况下可能会发生。
所以:不要过度使用严格的比较,它并不总是好的。你主要只在不明确的情况下需要它,比如strpos
的返回值。
答案 1 :(得分:4)
==
和===
之间存在性能差异 - 后者的速度甚至会快两倍,请参阅Equal vs identical comparison operator。
然而,差异太小而不能被打扰 - 除非代码执行了数百万次。
答案 2 :(得分:3)
这是你在那里做的非常小的优化。就个人而言,我认为这不值得。
当您显式转换值时,使用===
时未通过转换值获得的任何提升都会丢失。在您的情况下,由于类型对您来说并不重要,您应该==
并完成它。
我建议您在需要检查类型时保留===
- 例如0评估为假等等。
答案 3 :(得分:3)
任何性能提升在微观上都是微不足道的,除非你在数天内进行数十亿甚至数万亿次的比较,持续数日/月/年。严格的比较确实有它的用途,但它在PHP中也有些异常。 PHP是一种弱类型语言,并且(通常)自动转换/转换值是正确的。大多数情况下,没有必要进行严格的比较,因为PHP会做正确的事情。
但有些情况,例如使用strpos
时,自动转换会失败。如果您正在搜索的针在干草堆的开头处是正确的,strpos将返回'0',这将被视为FALSE,这是错误的。处理这个问题的唯一方法是通过严格的比较。
答案 4 :(得分:3)
PHP有一些WTF松散比较,返回TRUE,如:
array() == NULL
0 == 'Non-numeric string'
始终使用变量和字符串之间的严格比较
$var === 'string'