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
Çıktı, yukarıda verdiğimiz karşılaştırma kuralını doğrulamaktadır. Aynı sınıfın sadece özniteliklerinin değerleri aynı olan örnekleri eşit ve aynı kabul edilirler.
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