Συγκρίνοντας αντικείμενα στην PHP 4
Στην PHP 4, τα αντικείμενα συγκρίνονται σε έναν πολύ απλό τρόπο, δηλαδή: δυο στιγμιότυπα αντικειμένων είναι ίσα αν έχουν τις ίδιες τιμές και τα ίδια attributes, και είναι στιγμιότυπα της ίδιας κλάσης. Παρόμοιοι κανόνες εφαρμόζονται όταν συγκρίνονται δυο αντικείμενα χρησιμοποιώντας τον τελεστή ταυτότητας (===).
Αν είχαμε να εκτελέσουμε τον κώδικα στο παρακάτω παράδειγμα:
Example#1 Παράδειγμα σύγκρισης αντικειμένου στην 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);
?>
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
Ακόμη και στις περιπτώσεις όπου έχουμε σύνθεση αντικειμένου, οι ίδιοι κανόνες σύγκρισης εφαρμόζονται. Στο παρακάτω παράδειγμα δημιουργούμε μια container κλάση η οποία αποθηκεύει έναν associative πίνακα από Flag αντικείμενα.
Example#2 Compound συγκρίσεις αντικειμένων στην PHP 44
<?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);
?>
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