11111

Comparing objectsПред.Глава 18. Classes and Objects (PHP4)След.

Comparing objects

- In PHP4, 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:

Пример 18-1. Example of object comparison in PHP4

<?

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);

?>

Результат выполнения данного примера:
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.

Пример 18-2. Compound object comparisons in PHP4

<?

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);

?>

Результат выполнения данного примера:
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

Пред.

Начало

След.

References inside the constructor

Уровень выше

Классы и объекты (PHP 5) 22222

Free Web Hosting