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 #1 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
Note: Extensions can define own rules for their objects comparison.
© 2005-2008 BlaBla.cn 版权所有