9

我总是远离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');
    }

手动转换或转换是否获得了任何完整性(或性能),以便您可以使用身份('===')比较?

4

5 回答 5

13

在您的特定情况下==是更好的选择。正如您(如您的代码中所见)可能已经发现许多数据库函数将始终返回字符串,即使您获取整数也是如此。所以类型严格比较真的只会让你的代码膨胀。

此外,您正在添加潜在的(我们称之为理论上的)安全风险。例如(int) '100AB2'会屈服100。在您的情况下,这可能不会发生,但在其他情况下可能会发生。

所以:不要过度使用严格的比较,它并不总是好的。您主要只在模棱两可的情况下才需要它,例如strpos.

于 2011-05-02T05:17:09.617 回答
4

==和之间存在性能差异===- 后者甚至会快两倍,请参阅Equal vs same comparison operator。然而,差异太小而无法被打扰 - 除非代码被执行数百万次。

于 2011-05-22T19:53:11.880 回答
3

这是你在那里做的一个非常小的优化。就个人而言,我认为这并不值得。

当您显式施放该值时,您在使用时不施放该值所获得的任何提升===都会丢失。就您而言,由于类型对您来说并不重要,因此您应该做==并完成它。

我的建议是===在您还需要检查类型时保留 - 例如 0 评估为 false 等等。

于 2011-05-02T05:16:48.517 回答
3

除非您连续数天/数月/数年执行数十亿和数万亿次这样的比较,否则任何性能提升都将微乎其微。严格比较确实有它的用途,但它在 PHP 中也有点反常。PHP 是一种弱类型语言,并且(通常)为自动转换/转换值做正确的事情是正确的事情。大多数时候,没有必要进行严格的比较,因为 PHP 会做正确的事情。

但是在某些情况下,例如使用 时strpos,自动转换会失败。如果您正在搜索的针正好位于大海捞针的开头,strpos 将返回“0”,这将被视为 FALSE,这是错误的。处理这个问题的唯一方法是通过严格的比较。

于 2011-05-02T05:16:56.947 回答
3

PHP 有一些返回 TRUE 的 WTF 松散比较,例如:

array() == NULL

0 == 'Non-numeric string'

始终在变量和字符串之间使用严格比较

$var === 'string'
于 2014-01-29T17:04:26.557 回答