Geriçağırımlar / Çağırılılabilirler

Geriçağırımlar PHP 5.4.'ten itibaren callable tür ipucu ile belirtilebilirler. Bu belgelerde callback tür bilgisi aynı amaçla kullanıldı.

call_user_func() ya da usort() gibi bazı işlevler değiştirge olarak kullanıcı tarafından belirlenen geriçağırım işlevleri kabul eder. Geriçağırım işlevleri basit işlevler olabileceği gibi, duruk işlevler de dâhil olmak üzere object türünde nesne yöntemleri de olabilirler.

Aktarım

Bir PHP işlevi adı ile string türünde aktarılır. Her türlü yerleşik ve kullanıcı tanımlı işlev kullanılabilir, ancak; array(), echo, empty(), eval(), exit(), isset(), list(), print ya da unset() gibi dil sabitleri müstesna.

Örneklenmiş bir nesne yöntemi, 0 indisinde nesne, 1 indisinde yöntem adı olan bir dizi ile aktarılır. Korumalı ve özel yöntemlere sınıf içinden erişilebilir.

Duruk sınıf yöntemleri, 0 indisinde nesne yerine sınıf adı kullanılarak, sınıfın nesnesi örneklendirilmeden de aktarılabilir. PHP 5.2.3.'ten itibaren, 'SınıfAdı::yöntemAdı' kullanarak aktarmak da mümkündür.

Kullanıcı tanımlı işlevler haricinde, isimsiz işlevler de geriçağırım değiştirgesi olarak aktarılabilirler.

Örnek 1 Geriçağırım işlev örnekleri

<?php 

// Örnek bir geriçağırım işlevi
function benim_gericagirim_islevim() {
    echo 
'merhaba dünya!';
}

// Örnek bir geriçağırım yöntemi
class BenimSinifim {
    static function 
benimGericagirimYontemim() {
        echo 
'Merhaba Dünya!';
    }
}

// Tür 1: Basit geriçağırım
call_user_func('benim_gericagirim_islevim'); 

// Tür 2: Duruk sınıf yöntemi çağrısı
call_user_func(array('BenimSinifim''benimGericagirimYontemim'));

// Tür 3: Nesne yöntem çağrısı
$nesne = new BenimSinifim();
call_user_func(array($nesne'benimGericagirimYontemim'));

// Tür 4: Duruk sınıf yöntemi çağrısı (PHP 5.2.3 itibariyle)
call_user_func('BenimSinifim::benimGericagirimYontemim');

// Tür 5: İlişkisel duruk sınıf yöntem çağrısı (PHP 5.3.0 itibariyle)
class {
    public static function 
kim() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
kim() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::kim')); // A

// Tür 6: Nesneler, __invoke uyguluyorlarsa çağırılabilir olarak kullanılabilirler (PHP 5.3 sonrası)
class {
    public function 
__invoke($ad) {
        echo 
'Merhaba '$ad"\n";
    }
}

$c = new C();
call_user_func($c'PHP!');
?>

Örnek 2 Örtme kullanan Geriçağırım örneği

<?php
// Bizim örtücümüz
$iki_misli = function($a) {
    return 
$a 2;
};

// Bu bizim sayı aralığımız
$sayilar range(15);

// Sayı aralığımızın her bir elemanını
// ikiye katlamak için burada örtücüyü
// bir geriçağırım olarak kullandık
$yeni_sayilar array_map($iki_misli$sayilar);

print 
implode(' '$yeni_sayilar);
?>

Yukarıdaki örneğin çıktısı:

2 4 6 8 10

Bilginize:

call_user_func() ve call_user_func_array() gibi işlevlerle kayıt altına alınmış geriçağırım işlevleri, bir önceki geriçağırım işlevinde oluşmuş ve yakalanmamış bir istisna varsa çağrılmaz.