※ ChatGPTを利用し、要約された質問です(原文:比較演算子===と!==について)
比較演算子===と!==について
PHP初心者です。
まず、===と!==が型が同じかどうかを比較する演算子だという事は調べて分かりました。
問題は以下のソースコードに関してです。
<?php
class foo {
public $a = 3;
}
class hoge {
public $a = 3;
}
//真偽を文字列に変換する関数
function trueOrFalse($comp) {
return $comp? 'true':'false';
}
//4つの比較演算子を用いた比較の結果の表示
function compareObject($var1, $var2) {
print('$var1 == $var2 --'.trueOrFalse($var1 == $var2)."\n");
print('$var1 != $var2 --'.trueOrFalse($var1 != $var2)."\n");
print('$var1 === $var2 --'.trueOrFalse($var1 === $var2)."\n");
print('$var1 !== $var2 --'.trueOrFalse($var1 !== $var2)."\n");
}
//オブジェクトの生成
$f0 = new foo();
$f1 = new foo();
//$f0を代入、$f2は、$f0と同じオブジェクトを指す
$f2 = $f0;
$h0 = new hoge();
//結果の表示
print("同じクラス、プロパティが同じ\n");
compareObject($f0, $f1);
print("同じオブジェクトを参照\n");
compareObject($f0, $f2);
print("異なるクラス、プロパティは同じ\n");
compareObject($f0, $h0);
?>
この結果分からないのは$f0と$f1の比較で===はfalseに!==はtrueになる事です。
型が違うとは一体どういう事なのでしょうか。
また、付け足す形になりますが、$f0と$h0の比較についても分かりません。
値は両方3です。
なのに==はfalseに!=はtrueになります。
これはどうしてでしょうか。
アドバイスどうぞ宜しくお願い致します。
お礼
親切丁寧な回答に感謝します。 これで両方とも疑問が解決できました。