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.

To Top