|
警告
|
|
この拡張モジュールは、
実験的
なものです。この拡張モジュールの動作・ 関数名・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 このモジュールは自己責任で使用してください。
|
PHP 5では、オブジェクトの比較はPHP 4よりも複雑になり、 オブジェクト指向言語で期待される動作により近くなります。 (PHP 5はオブジェクト指向言語ではありません)
比較演算子(
==
)を用いた場合、 オブジェクト変数は単純に比較されます。つまり、 同じ属性と値を有し、同じクラスのインスタンスである場合に 二つのオブジェクトのインスタンスが等しくなります。
一方、identity演算子(
===
)の場合、 オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ 等しくなります。
これらの規則を明確にするための例を示します。
例 18-3. PHP 5のオブジェクト比較の例
<?php
function
bool2str
(
$bool
) {
if (
$bool
===
false
) {
return
'FALSE'
;
} else {
return
'TRUE'
;
}
}
function
compareObjects
(&
$o1
, &
$o2
) {
echo
'o1 == o2 : '
.
bool2str
(
$o1
==
$o2
).
"\n"
;
echo
'o1 != o2 : '
.
bool2str
(
$o1
!=
$o2
).
"\n"
;
echo
'o1 === o2 : '
.
bool2str
(
$o1
===
$o2
).
"\n"
;
echo
'o1 !== o2 : '
.
bool2str
(
$o1
!==
$o2
).
"\n"
;
}
class
Flag
{
var
$flag
;
function
Flag
(
$flag
=
true
) {
$this
->
flag
=
$flag
;
}
}
class
OtherFlag
{
var
$flag
;
function
OtherFlag
(
$flag
=
true
) {
$this
->
flag
=
$flag
;
}
}
$o
= new
Flag
();
$p
= new
Flag
();
$q
=
$o
;
$r
= new
OtherFlag
();
echo
"Two instances of the same class\n"
;
compareObjects
(
$o
,
$p
);
echo
"\nTwo references to the same instance\n"
;
compareObjects
(
$o
,
$q
);
echo
"\nInstances of two different classes\n"
;
compareObjects
(
$o
,
$r
);
?>
|
|
この例の出力は以下のようになります。
Two instances of the same class o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE Two references to the same instance o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : TRUE o1 !== o2 : FALSE Instances of similarly named classes in different namespaces o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE
|