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 (biz "iki nokta çifti" diyebiliriz), bir sınıfın duruk, sabit ve geçersiz kılınmış özellik ve yöntemlerine erişilebilmesini sağlayan bir simgedir.

Bu öğelere sınıf tanımının dışından erişirken bu işlecin solunda sınıfın ismini kullanın.

PHP 5.3.0 ve sonrasında, 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 
$duruk 'Bir duruk değişken';

    public static function 
ikiNoktaÇifti() {
        echo 
parent::SABİT_DEĞER "\n";
        echo 
self::$duruk "\n";
    }
}

$sınıfadı 'BaşkaSınıf';
$sınıfadı::ikiNoktaÇifti(); // PHP 5.3.0 ve sonrası

BaşkaSınıf::ikiNoktaÇifti();
?>

Çocuk sınıf ebeveyninin yöntem tanımlarından birini geçersiz kıldığı takdirde PHP ebeveyne ait yöntemi çağıramayacaktır. 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, duruk çağrı hilesi örneklerine de bakınız.