8 EYLÜL 2008, PAZARTESİ
Nasıl PHP bir geri arama uygulamak?
Nasıl geri PHP ile yazılmış?
CEVAP
8 EYLÜL 2008, PAZARTESİ
Manuel kullanır şartları "geri" ve "çağrı" birbirinin yerine, ancak, "geri" geleneksel olarak başvurulan bir dize veya bir dizi değer görür gibi function pointer, başvuran bir işlev veya sınıf yöntemi için gelecek çağırma. Bu PHP 4'ten beri fonksiyonel programlama bazı unsurları sağladı. Tatlar:
$cb1 = 'someGlobalFunction';
$cb2 = ['ClassName', 'someStaticMethod'];
$cb3 = [$object, 'somePublicMethod'];
// this syntax is callable since PHP 5.2.3 but a string containing it
// cannot be called directly
$cb2 = 'ClassName::someStaticMethod';
$cb2(); // fatal error
// legacy syntax for PHP 4
$cb3 = array(&$object, 'somePublicMethod');
Bu genel olarak çağrılabilir değerleri kullanmak için güvenli bir yoldur:
if (is_callable($cb2)) {
// Autoloading will be invoked to load the class "ClassName" if it's not
// yet defined, and PHP will check that the class has a method
// "someStaticMethod". Note that is_callable() will NOT verify that the
// method can safely be executed in static context.
$returnValue = call_user_func($cb2, $arg1, $arg2);
}
Modern PHP sürümleri ilk üç biçimden yukarıda doğrudan $cb()
olarak çağrılacak izin verir. call_user_func
call_user_func_array
yukarıdaki tüm destek.
Bakın: http://php.net/manual/en/language.types.callable.php
Notlar/Uyarılar:
- Eğer fonksiyon/sınıf namespaced ise, dize tam adını içermelidir. E. g.
['Vendor\Package\Foo', 'method']
call_user_func
desteklemiyor geçirmeden olmayan nesneler tarafından referans, öyle olmanız gerekir:call_user_func_array
ya da, daha sonra PHP sürümleri Kaydet geri arama için bir var ve kullanımı doğrudan sözdizimi:$cb()
;- Nesnelerle
__invoke()
yöntem (dahil olmak üzere anonim fonksiyonlar) sonbahar kategori altında "çağrı" ve kullanılabilir aynı şekilde, ama ben şahsen yok ilişkilendirmek bu eski "geri arama" terimi. - Eski
create_function()
global bir işlev oluşturur ve onun adını verir.eval()
sabahlık ve anonim işlevleri yerine kullanılmalıdır.
Bunu Paylaş:
&Quot;geri arama uygulamak için nasıl&...
Nasıl bir setTimeout için bir parametr...
Vim, nasıl bir arama daha önce olduğum...
Nasıl doğru erişim için `` / bu içeriğ...
Tarihi nasıl uygulamak için.() geri an...