2017-01-04 5 views
0

私はのは、私は2つの小さなテキストを持っているとしましょう 、比較について尋ねています:PHP:Not-equalオペレータとNot-identicalオペレータはどのように動作し、同等か等しいオペレータよりも高速ですか?

  • ABC:
「xThisが非常に長いテキストです」:
  • XYZ「これは非常に長いテキストです」

    PHPはすべての文字を比較しますか、またはマスクとバイナリとして比較しますか?

    例として、abc !== xyzの場合、PHPが文字を比較すると、最初の文字の後に改行されるため、より高速になります。 How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

    は、だから私は===が速くより==鋳造のためであることを知っている:

    は、私はすでにのような質問をお読みください。

    ===または==とは、!==または!=と比べて何ですか?等価演算子がhere定義さ

    typedef struct { 
        char *c; 
        size_t len; 
        size_t a; 
    } smart_string; 
    

  • +0

    「マスクとバイナリを比較する」とはどういう意味ですか?そして、 '!='/'!=='は、あなたがリンクしている答えに記述されているように、この点で '=='/'==='と同じことをします。 – Carpetsmoker

    +0

    私は間違っているかもしれませんが、 "マスク"のために、あなたはここで読むことができます:https://en.wikipedia.org/wiki/Mask_(computing) – Regda

    答えて

    0

    文字列は構造hereとして定義されます。

    まず、:あなたがCを話さない場合には(それは常に偽になると、彼らはアドレスチェックをスキップ除き、3つの等価演算子は、本質的に同じように実行し、次の)

    static zend_always_inline zend_bool zend_string_equals(zend_string *s1, zend_string *s2) 
    { 
        return s1 == s2 || (ZSTR_LEN(s1) == ZSTR_LEN(s2) && !memcmp(ZSTR_VAL(s1), ZSTR_VAL(s2), ZSTR_LEN(s1))); 
    } 
    

    それぞれの文字列構造のアドレスが比較されます。これらが等しい場合、文字列は等しくなければなりません。それ以外の場合は、さらにチェックが行われます。

    第2に、アドレスが等しくなければ、各文字列の長さが比較されます。これは、長さが文字列の構造体定義の一部であるため、整数の等価チェックに過ぎません。長さが等しくない場合、falseが返されます。

    次に、memcmpで各文字列のメモリ内容がチェックされます。メモリの内容が等しい場合、memcmpは0を返します。これは、trueを返すために否定されます。

    あなたの質問に明示的に答えるにはPHPは文字列のすべての文字をチェックするのを避けますが、最後の文字を除く文字のすべての文字が等しい場合、文字列は同じです。

    私は言う必要があります:===が実際に!==より遅いことを心配している場合は、really shouldn't beです。

    +0

    これは私を大いに助けますが、私の質問を本当に解決しません。 zend_string_equals関数がどの演算子に対して使用されるかはまだ分かりません。 だからatm私はそれが "==="と "!=="のために使用されると思います否定だけではなく、独自の関数ですか? – Regda

    +0

    ここにmemcmpの実装があります:http://clc-wiki.net/wiki/memcmp – Regda

    +0

    @Regda文字列を比較するために使用されます(文字列が数値でないと仮定すると '=='と一緒に使用されます)。 '===') - 異なる型を比較す​​るために、比較のための規則[here](http://php.net/manual/en/language.operators.comparison.php)を見直さなければなりません。 – Gerrit0

    関連する問題