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.
Example 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); ?>
|
The above example will output: 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 |
|