• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:比較演算子===と!==について)

比較演算子===と!==について

このQ&Aのポイント
  • PHP初心者のため、比較演算子===と!==について質問があります。
  • ===と!==は、型まで比較する演算子です。
  • 例えば、同じ値でも型が違う場合、===ではfalseになることがあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

$f0 = new foo(); $f1 = new foo(); 共に同じfooクラスのインスタンスです。 が、別別のインスタンスです。 「一致演算子(===)を使用する場合、 オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ、 等しいとされます。 」 とあります。 一方 「比較演算子(==)を使用する際、 オブジェクト変数は、単純に比較されます。つまり、 二つのオブジェクトのインスタンスは、 同じ属性と値を有し、同じクラスのインスタンスである場合に、 等しいとされます。 」 とあります。 $f0と$h0は別のクラスです。よって $f0==$h0は偽です。

persona
質問者

お礼

親切丁寧な回答に感謝します。 これで両方とも疑問が解決できました。

その他の回答 (4)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.5

PHPの設計者が 一致演算子(===)を使用する場合、オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ、等しいとされます。 と決めたのでそういうものと理解するしかないですね

persona
質問者

お礼

アドバイスありがとうございます。 なるほど、数学の公式のような感じですかね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

==は一致で、===は完全一致ですね。 ==ではあいまいに一致を判断するので厳密にはんだするためには ===を使います <? $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; ?>

persona
質問者

お礼

アドバイスありがとうございます。 回答頂いた内容については理解できたつもりです。 その上で言葉足らずの部分を補い、もう1度質問しても宜しいでしょうか。 $f0 = new foo(); $f1 = new foo(); 共に同じfooクラスのインスタンスです。 これが完全一致しないのは何故でしょうか。 もう1つここは同じ文になりますが、$f0と$h0の比較についても分かりません。 両方の値は3です。 なのに==はfalseに!=はtrueになります。 何故値は同じなのに一致しないのでしょうか。 この2点について再度アドバイスを頂けると非常に助かります。 答えるかどうかはyambejpさんに全てお任せします。 どうぞ宜しくお願い致します。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

No.1回答者です。失礼しました、マニュアルの(例)とほとんど同じ物を質問されているのですね。つまりマニュアルの意味がわからないということですね。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

オブジェクトの比較については、マニュアルで説明されています。 http://www.php.net/manual/ja/language.oop5.object-comparison.php

関連するQ&A