PHP 4'te, nesneler çok basit şekilde karşılaştırılırlar: İki nesne örneği, aynı özniteliklere ve değerlere sahipseler ve aynı sınıfın örnekleriyseler eşittirler. Nesneler aynılık (===) işleciyle karşılaştırılırken de aynı kurallar uygulanır.
Aşağıdaki kodu çalıştırdığımızı varsayalım:
Örnek 1 - PHP 4'te nesne karşılaştırma örneği
<?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 Bayrak {
var $bayrak;
function Bayrak($bayrak=true) {
$this->bayrak = $bayrak;
}
}
class DeğiştirilebilirBayrak extends Bayrak {
function turnOn() {
$this->bayrak = true;
}
function turnOff() {
$this->bayrak = false;
}
}
$o = new Bayrak();
$p = new Bayrak(false);
$q = new Bayrak();
$r = new DeğiştirilebilirBayrak();
echo "Aynı değiştirgelerle oluşturulmuş örnekleri karşılaştıralım.\n";
compareObjects($o, $q);
echo "\nFarklı değiştirgelerle oluşturulmuş örnekleri karşılaştıralım.\n";
compareObjects($o, $p);
echo "\nBir ebeveyn sınıf örneğini bir alt sınıfınki ile karşılaştıralım.\n";
compareObjects($o, $r);
?>
Yukarıdaki örneğin çıktısı:
Aynı değiştirgelerle oluşturulmuş örnekleri karşılaştıralım. o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE Farklı değiştirgelerle oluşturulmuş örnekleri karşılaştıralım. o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE Bir ebeveyn sınıf örneğini bir alt sınıfınki ile karşılaştıralım. o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE
Bileşik nesnelerde de aynı karşılaştırma kuralları uygulanır. Aşağıdaki örnekte, Bayrak nesnelerinden oluşan bir ilişkisel diziyi saklayan bir taşıyıcı sınıf oluşturulmaktadır.
Örnek 2 - PHP 4'te bütünleşik nesnelerin karşılaştırılması
<?php
class BayrakAta {
var $set;
function BayrakAta($bayrakDizisi = array()) {
$this->set = $bayrakDizisi;
}
function bayrakEkle($isim, $bayrak) {
$this->set[$isim] = $bayrak;
}
function bayrakSil($isim) {
if (array_key_exists($isim, $this->set)) {
unset($this->set[$isim]);
}
}
}
$u = new BayrakAta();
$u->bayrakEkle('bayrak1', $o);
$u->bayrakEkle('bayrak2', $p);
$v = new BayrakAta(array('bayrak1'=>$q, 'bayrak2'=>$p));
$w = new BayrakAta(array('bayrak1'=>$q));
echo "\nu(o,p) ve v(q,p) birleşik nesneleri\n";
compareObjects($u, $v);
echo "\nu(o,p) ve w(q)\n";
compareObjects($u, $w);
?>
Yukarıdaki örneğin çıktısı:
u(o,p) ve v(q,p) birleşik nesneleri o1 == o2 : TRUE o1 != o2 : FALSE o1 === o2 : FALSE o1 !== o2 : TRUE u(o,p) ve w(q) o1 == o2 : FALSE o1 != o2 : TRUE o1 === o2 : FALSE o1 !== o2 : TRUE