Comparing objects

Comparing objects

In PHP 4, objects are compared in a very simple manner, namely: Two object instances are equal if they have the same attributes and values, and are instances of the same class. Similar rules are applied when comparing two objects using the identity operator (===).

If we were to execute the code in the example below:

Example 18-1. Example of object comparison in PHP 4

<?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
SwitchableFlag extends Flag {

    function
turnOn() {
        
$this->flag = true;
    }

    function
turnOff() {
        
$this->flag = false;
    }
}

$o = new Flag();
$p = new Flag(false);
$q = new Flag();

$r = new SwitchableFlag();

echo
"Compare instances created with the same parameters\n";
compareObjects($o, $q);

echo
"\nCompare instances created with different parameters\n";
compareObjects($o, $p);

echo
"\nCompare an instance of a parent class with one from a subclass\n";
compareObjects($o, $r);
?>

The above example will output:

Compare instances created with the same parameters
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE

Compare instances created with different parameters
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE

Compare an instance of a parent class with one from a subclass
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Which is the output we will expect to obtain given the comparison rules above. Only instances with the same values for their attributes and from the same class are considered equal and identical.

Even in the cases where we have object composition, the same comparison rules apply. In the example below we create a container class that stores an associative array of Flag objects.

Example 18-2. Compound object comparisons in PHP 4

<?php
class FlagSet {
    var
$set;

    function
FlagSet($flagArr = array()) {
        
$this->set = $flagArr;
    }

    function
addFlag($name, $flag) {
        
$this->set[$name] = $flag;
    }

    function
removeFlag($name) {
        if (
array_key_exists($name, $this->set)) {
            unset(
$this->set[$name]);
        }
    }
}


$u = new FlagSet();
$u->addFlag('flag1', $o);
$u->addFlag('flag2', $p);
$v = new FlagSet(array('flag1'=>$q, 'flag2'=>$p));
$w = new FlagSet(array('flag1'=>$q));

echo
"\nComposite objects u(o,p) and v(q,p)\n";
compareObjects($u, $v);

echo
"\nu(o,p) and w(q)\n";
compareObjects($u, $w);
?>

The above example will output:

Composite objects u(o,p) and v(q,p)
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE

u(o,p) and w(q)
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE



Links
iPowerWeb $7.95/mo
  • 50GB Diskspace
  • 750GB Bandwidth
  • CGI Perl PHP SSI SSL MySQL
  • Free Domain Name

HostGator $9.95/mo
  • 100GB Diskspace
  • 1000GB Bandwidth
  • Host Unlimited Domains
  • CPanel
  • PHP CGI SSH SSI
  • Instant Backups
  • 99.9% Uptime Guarantee
  • 30 Day Money Back

Bluehost $6.95/mo
  • 50GB Diskspace
  • 999GB Bandwidth
  • Host 6 Domains
  • CGI Ruby(RoR) Perl PHP MySQL PostgreSQL
  • Support Custom PHP.INI
  • SSH SSL FTP Stats
  • Free Domain Forever
  • 27/7 Support

Hosting Companies


Partners


Quick Search
Platform

Price

Diskspace

Bandwidth


 Advance Search
 Show All Companies


Reference & Manual

If you are looking for dedicated servers, look no further. HostPulse.com is a site devoted to help web users find cheap web hosting and dedicated servers.


Free Sitemap Generator Host Login/Register | Contact Us | Terms | Add Links
Thumbnails by Thumbshots.org © 2002-2008 CheapHostDir.com