JavaScript Editor Javascript debugger     Website design 


Comparing objects

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 10.32. 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.