- ベストアンサー
比較演算子===と!==について
- PHP初心者のため、比較演算子===と!==について質問があります。
- ===と!==は、型まで比較する演算子です。
- 例えば、同じ値でも型が違う場合、===ではfalseになることがあります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
$f0 = new foo(); $f1 = new foo(); 共に同じfooクラスのインスタンスです。 が、別別のインスタンスです。 「一致演算子(===)を使用する場合、 オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ、 等しいとされます。 」 とあります。 一方 「比較演算子(==)を使用する際、 オブジェクト変数は、単純に比較されます。つまり、 二つのオブジェクトのインスタンスは、 同じ属性と値を有し、同じクラスのインスタンスである場合に、 等しいとされます。 」 とあります。 $f0と$h0は別のクラスです。よって $f0==$h0は偽です。
その他の回答 (4)
- php504
- ベストアンサー率42% (926/2160)
PHPの設計者が 一致演算子(===)を使用する場合、オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ、等しいとされます。 と決めたのでそういうものと理解するしかないですね
お礼
アドバイスありがとうございます。 なるほど、数学の公式のような感じですかね。
- yambejp
- ベストアンサー率51% (3827/7415)
==は一致で、===は完全一致ですね。 ==ではあいまいに一致を判断するので厳密にはんだするためには ===を使います <? $a=null; if($a=="" && is_null($a) && empty($a) && $a==0) print 1; ?> これで1が表示されます。 つまり型が違うと、nullと空(empty)と""と0とfalseは同じなんです。 厳密にチェックするにはこうなりますね・・・・ <? $a=null; if($a=="" && $a==0 && $a==false && is_null($a) && empty($a)) print 1; if($a==="") print 2; if($a===0) print 3; if($a===false) print 4; if($a===null) print 5; ?>
お礼
アドバイスありがとうございます。 回答頂いた内容については理解できたつもりです。 その上で言葉足らずの部分を補い、もう1度質問しても宜しいでしょうか。 $f0 = new foo(); $f1 = new foo(); 共に同じfooクラスのインスタンスです。 これが完全一致しないのは何故でしょうか。 もう1つここは同じ文になりますが、$f0と$h0の比較についても分かりません。 両方の値は3です。 なのに==はfalseに!=はtrueになります。 何故値は同じなのに一致しないのでしょうか。 この2点について再度アドバイスを頂けると非常に助かります。 答えるかどうかはyambejpさんに全てお任せします。 どうぞ宜しくお願い致します。
- yyr446
- ベストアンサー率65% (870/1330)
No.1回答者です。失礼しました、マニュアルの(例)とほとんど同じ物を質問されているのですね。つまりマニュアルの意味がわからないということですね。
- yyr446
- ベストアンサー率65% (870/1330)
オブジェクトの比較については、マニュアルで説明されています。 http://www.php.net/manual/ja/language.oop5.object-comparison.php
お礼
親切丁寧な回答に感謝します。 これで両方とも疑問が解決できました。