In PHP 5, object comparison is more complicated than in PHP 4 and more
in accordance to what one will expect from an Object Oriented Language
(not that PHP 5 is such a language).
When using the comparison operator (
==
),
object variables are compared in a simple manner, namely: Two object
instances are equal if they have the same attributes and values, and are
instances of the same class.
On the other hand, when using the identity operator (
===
),
object variables are identical if and only if they refer to the same
instance of the same class.
An example will clarify these rules.
例子 19-30. Example of object comparison in 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
{
public $flag
;
function
Flag
(
$flag
=
true
) {
$this
->
flag
=
$flag
;
}
}
class
OtherFlag
{
public $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 two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
|
|