• Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha fazla bilgi edin.

Etki Alanı Çözünürlük İşleci (::)

Konuyu Okuyan Kişiler (0)

delete38

webmaster.tc
Katılım
7 Ara 2012
Mesajlar
27
Beğeniler
0
#1
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:
<?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 veya parent anahtar sözcüğü kullanılır.

Örnek 2 - Sınıf tanımı içinde ::
PHP:
<?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';
echo $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:
<?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();
?>