Etki Alanı Çözünürlük İşleci (::)
Etki Alanı Çözünürlük İşleci (Paamayim Nekudotayim de denirmiş), basitçe
bir çift iki nokta iminden ibaret olup (buna "iki nokta çifti" de
denebilir), bir sınıfın veya ebeveyninin
statik,
sabit özellik veya
static yöntemine
erişilebilmesini sağlayan bir simgedir. Ayrıca, statik özellik ve yöntemler
statik içselleştirim
aracılığıyla geçersiz kılınabilir.
Bu öğelere sınıf tanımının dışından erişirken bu işlecin solunda sınıfın
ismini kullanın.
Bu işlecin solunda sınıf ismi yerine bir değişken
kullanmak da mümkündür. Değişken ismi, (self
,
parent
, static
gibi) bir anahtar
sözcük olmamalıdır.
Paamayim Nekudotayim
ilk bakışta iki nokta üst üste için
garip bir adlandırma gibi gözükebilir. Ancak, Zend Engine 0.5 (php 3'ün
kalbidir) yazıldığı esnada Zend ekibinin kullanmak istediği terim bu
oldu. Esasında bu iki sözcük de iki nokta çifti anlamına gelmektedir -
İbranice'de!
Örnek 1 - Sınıf tanımı dışında ::
<?php
class Sınıfım {
const SABİT_DEĞER = 'Bir sabit değer';
}
echo Sınıfım::SABİT_DEĞER;
?>
Bir sınıfın özellik ve yöntemlerine bu işleç sayesinde sınıfın içinden
erişilmek istendiğinde işlecin solunda self,
parent veya static anahtar sözcüğü
kullanılır.
Örnek 2 - Sınıf tanımı içinde ::
<?php
class BaşkaSınıf extends Sınıfım
{
public static $statik = 'Bir statik değişken';
public static function ikiNoktaÇifti() {
echo parent::SABİT_DEĞER . "\n";
echo self::$statik . "\n";
}
}
$sınıfadı = 'BaşkaSınıf';
$sınıfadı::ikiNoktaÇifti();
BaşkaSınıf::ikiNoktaÇifti();
?>
Çocuk sınıf ebeveyninin yöntem tanımlarından bazılarını geçersiz kılarsa
PHP bu yöntemlerin ebeveyn tanımlarına çağrı yapmaz. Ebeveynin yönteminin
çağrılıp çağrılmayacağı çocuk sınıfın inisiyatifindedir. Bu durum aynı
zamanda Kurucular ve
Yıkıcılar, Aşırı
Yükleme ve Sihirli
yöntem tanımları için de geçerlidir.
Örnek 3 - Ebeveynin yöntemini çağırmak
<?php
class Sınıfım
{
protected function işlevim() {
echo "Sınıfım::işlevim()\n";
}
}
class BaşkaSınıf extends Sınıfım
{
// Ebeveynin tanımını geçersiz kılalım
public function işlevim()
{
// Ama hala ebeveynin işlevini çağırabiliriz
parent::işlevim();
echo "BaşkaSınıf::işlevim()\n";
}
}
$class = new BaşkaSınıf();
$class->işlevim();
?>
Ayrıca, statik çağrı hilesi
örneklerine de bakınız.