9

私は常にstackoverflowの回答と、より厳密な比較を使用し、一致を確認するために値の型を変換するリソースを無駄にしないため、"==="優れた読み取りから離れてきました。"=="

私は間違った仮定でこれに到達している可能性があるため、この質問の一部は「私の仮定は正しいですか?」であると思います。

第二に、

データベースから string の形式でデータを取得している状況を具体的に扱っています"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');
    }

'==='ID( )比較を使用できるように、手動でキャストまたは変換するだけで整合性(またはパフォーマンス)が得られますか?

4

5 に答える 5

13

あなたの特定のケース==では、より良いオプションです。あなたが (あなたのコードでわかるように) 整数をフェッチしても、多くのデータベース関数が常に文字列を返すことをおそらくすでに知っているでしょう。したがって、厳密な比較を入力すると、実際にはコードが肥大化するだけです。

さらに、潜在的な(理論的なものとしましょう)セキュリティリスクを追加しています。たとえば(int) '100AB2'、 が得られ100ます。あなたの場合、これはおそらく起こり得ませんが、他の場合はそうなる可能性があります。

だから:厳密な比較を使いすぎないでください。常に良いとは限りません。の戻り値のように、主にあいまいな場合にのみ必要ですstrpos

于 2011-05-02T05:17:09.617 に答える
4

と の間にはパフォーマンスの違いが==あり===ます - 後者は 2 倍の速さです。等しい vs 同一の比較演算子を参照してください。ただし、コードが何百万回も実行されない限り、違いは小さすぎて気にすることはできません。

于 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 に答える