array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'language.types.callable.php', 1 => 'Geriçağırımlar / Çağrılılabilirler', ), 'up' => array ( 0 => 'language.types.php', 1 => 'Türler', ), 'prev' => array ( 0 => 'language.types.resource.php', 1 => 'resource', ), 'next' => array ( 0 => 'language.types.mixed.php', 1 => 'mixed', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'language/types/callable.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
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.
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.