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.
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 A {
public static function kim() {
echo "A\n";
}
}
class B extends A {
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 C {
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(1, 5);
// 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.