Statik elemanı dizisinin bir parçası olarak geri aramalar

0 Cevap php

Son zamanlarda bir proje üzerinde çalışıyorum, bu yüzden gibi, bir statik üye dizide geri aramaları depolamak için gerekli:

class Example {
    private static $_callbacks = array(
        'foo'=>array('Example','do_foo'),
        'bar'=>array('Example','do_bar')
    );
    private static function do_foo() { }
    private static function do_bar() { }
}

Onları aramak için, ben (Example sınıfının içinde) açık (hatta belki de naif) sözdizimi çalıştı:

public static function do_callbacks() {
    self::$_callbacks['foo']();
    self::$_callbacks['bar']();
}

Benim için sürpriz, bu ben tanımlanmamış bir değişken, ve self::$_callbacks['foo'] çağrılabilir olması gerektiğini belirten bir ölümcül hata erişen bir haber sonucunda, işe yaramadı.

Sonra, ben denedim call_user_func:

public static function do_callbacks() {
    call_user_func(self::$_callbacks['foo']);
    call_user_func(self::$_callbacks['bar']);
}

Ve işe yaradı!

Benim soru:

Why do I need to use call_user_func bir aracı olarak ve doğrudan doğruya onları aramak değil mi?

0 Cevap