2012-01-07 6 views
3

PHP neewbieとして、私は学ぶために他の多くの人のコードを読み込もうとします。 今日、私はこのようなラインに出くわした:私は、誰かが私にそれを説明することができた場合 !==false==true の違いはあると思いまし論理演算子PHP trueまたはfalse

if (stripos($post_to_check->post_content, '[' . $shortcode) !== false) 

、それをいただければ幸いです。 ..実際の違いがない場合は、引用されたものを他のものよりも使用する理由は何ですか?

+0

http://php.net/manual/en/language.operators.comparison.php – hakre

+1

[参考文献 - この記号はPHPで何を意味していますか?](http://stackoverflow.com/questions/3737139)/reference-what-does-this-symbol-in-php) – hakre

+0

@hakre実際にはそうではありません - なぜこの特定のケースで使用されているのかを説明していません –

答えて

6

PHPは緩やかな型付け言語です。 ==が両方の値に一致し、===が値と値のデータ型とを一致させます。条件の上

if (8 == '8') // returns true 

はちょうどTRUE

if (8 === '8') // returns false 

にないデータ型が故にifを評価値と一致し、この値の1つのチェック値とデータ型の両方が故に、このifFALSE

に評価します値とデータ型の両方をチェックする場合は===を使用し、データ型ではない値のみを比較する必要がある場合は==を使用します。文字列は、それがFALSEを返します。見つからない場合は、あなたの場合は

striposは、文字列内のサブ文字列の位置を返します。

if (stripos($post_to_check->post_content, '[' . $shortcode) !== false) 

文字列内のチェックサブ文字列上記のコードとサブ文字列が見つかった場合にのみTRUEに評価され得ます。あなたは

if (stripos($post_to_check->post_content, '[' . $shortcode) != false) 

とするとき、サブ文字列がifは、サブ文字列がメインの文字列である場合でもFALSEと評価さ0位置に見にそれを変更した場合 。 はその後、条件はこの

if (0 != false) 

ようになり、0が考慮されているため、あなたはこれが比較されますが!==

if (0 !== false) 

を使用する必要が

FALSEとしてはFALSEと評価されます値と両方の値のデータ型 値0は整数型であり、falseは、したがって、データ型は、ここでは一致していないとの条件は、これらのcomparison operatorは一度これを確認する必要がありTRUE

PHPマニュアルページ状態となり、booleanタイプです。

+0

あなたの答えはありがたいことにShaktiありがとうございましたが、私はちょっと疑問を持って私を助けてくれませんでした(私は== falseと== TRUEの違いは何ですか?と尋ねました!== falseと!= false) 。しかし、私はそれがすべて私のneewbieの状態と関係し、stripos()関数が真偽関数ではないことを知らないことを理解しました。 VALUEまたはFALSEを返します。その場合、特定のプログラマーがなぜそれを使用したのか理解しています。私はまだ違いが何であるかわからない!==偽と==真は.. –

1

!==、だけでなく、両方の変数の種類を比較しません比較です。

striposは、ヒットが見つからない場合はfalseを返すことができるため、ここで使用されますが、文字列の最初の文字にヒットが見つかった場合は0となります。

==は、これらの2つのケースを区別できません(どちらも「偽」です)ので、striposを使用する場合は===を使用する必要があります。 manualに警告があります:

この関数は論理値FALSEを返すことがありますが、また「」0など、FALSEと評価され非ブール値を返すかあります。詳細についてはブーリアンに関するセクションをお読みください。この関数の戻り値をテストするには、===演算子を使用します。

+0

なぜdownvoteですか? –

3

!==false==trueの差はPHPで同じ/同一ではないと等しい/等しくない比較の間の差です。

同一の違い等しいが何であるかをPHPマニュアルでComparison Operatorsを参照してください。

+0

お返事いただきありがとうございました。前のように、私はすでにそのページを読んでいます。私が知らなかったのは、stripos()がtrue/false関数ではなく、value/false関数であるという事実でした。 true/false関数であれば、私はまだ== falseと== trueの違いを理解するのに問題があります( "true"と "false"は文字列にすることはできません) –

+0

'==' =等値比較。 '===' =同一の比較。 '!=='は同一比較の否定であり、等価比較の否定ではありません。多分それはポイントですか? – hakre

+0

私が言ったように、私は平等を理解する!=同じでも、----とにかく、私はあなたに十分に感謝することはできません。私は多くのことを学びました。これについて疑問を抱いている...ありがとう、もう一度、 –

-1

注:== trueと=== trueは異なります。

私はそう思います!== falseは=== trueと似ていますので、説明するだけ== trueと=== trueです。最初の==の場合、値は等しいので、1 == true、0 == false。 ===の場合、PHPでは "同一"、つまり値が同じで、型も同じです。

したがって、結果が0番目の位置にある場合、結果はtrueになります。しかし、use == trueの場合、0!= trueとしては機能しません。

たとえば、 stripos( 'a sheep'、 'a') == trueを使用すると、結果は最初と同じです。

+0

どうしてこんなに完全な正解が下降しているの?それは良い点だと助けになる!真剣に、私はStackOverflowの品質がWikipediaの道を行くようになってきていると感じています。 –