SORU
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:

  1. Eğer fonksiyon/sınıf namespaced ise, dize tam adını içermelidir. E. g. ['Vendor\Package\Foo', 'method']
  2. 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();
  3. 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.
  4. 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ş:
  • Google+
  • E-Posta
Etiketler:
Php

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Animation Workshop

    Animation Wo

    8 NİSAN 2010
  • Avast

    Avast

    27 NİSAN 2006
  • H3Ctic (old channel)

    H3Ctic (old

    23 Mart 2011