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

Geriçağırımlar callable tür ipucu ile belirtilebilir.

call_user_func() ya da usort() gibi bazı işlevler bağımsız değişken 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, statik 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.

Statik sınıf yöntemleri, 0 indisinde nesne yerine sınıf adı kullanılarak, sınıfın nesnesi örneklendirilmeden ya da 'SınıfAdı::yöntemAdı' kullanılarak aktarılabilir.

Kullanıcı tanımlı işlevler haricinde, isimsiz işlevler ve ok işlevleri de geriçağırım bağımsız değişkeni olarak aktarılabilir.

Bilginize:

PHP 8.1.0 itibariyle, anonim işlevler de birinci sınıf çağrılabilir sözdizimi kullanılarak oluşturulabiliyor.

Genel olarak, __invoke() gerçekleyen her nesne bir geriçağırım bağımsız değişkeni olarak aktarılabilir.

Ö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: Statik 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: Statik sınıf yöntemi çağrısı
call_user_func('BenimSinifim::benimGericagirimYontemim');

// Tür 5: İlişkisel statik sınıf yöntem çağrısı
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, PHP 8.2.0 ve sonrasında önerilmiyor

// Tür 6: Nesneler, __invoke uyguluyorlarsa çağırılabilir olarak kullanılabilirler
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 tanımlanmış geriçağırım işlevleri, bir önceki geriçağırım işlevinde yavrulanmış ve yakalanmamış bir istisna varsa çağrılmaz.

To Top