Tüm komut işleme tamamlandıktan sonra bir yöntemin çağrılması

1 Cevap

Eğer miras bir temel uygulama sınıfını tanımlar: Ben (-p crt0 denir) bir başlık komut içerebilir, böylece "fantezi" / "deneysel" php biraz yapmaya çalışıyorum.

Daha sonra sınıfları kontrol eder ve uygulama sınıfı sınıflara bir tane bulur ve "Ana" işlevini çağıran bir işlev sağlar. Eğer başlığı içerir Bu şekilde, varsayılan uygulama sınıfı türetilen bir sınıf oluşturmak ve statik bir ana fonksiyonu ve voila vermesini sağlamak - Eğer uygulama sihirli önceden tanımlanmış dolu vb, java / c # benzer (ana işlevi içine alır uygulama işlevselliği).

Kullanıcıların uygulama sınıfı tanımlanmıştır kadar yaşıyorum tek sorun "bekliyor" dir; Bu uygulama sınıfı kullanıcı uygulanmasından önce gelmek zorundadır tanımlar içerir çünkü "kontrol" de aynı komut dosyası içinde çağrıldığını ve kullanıcı kendi işlevi tanımlar önce henüz tanımlanmış değil böylece kullanıcıların sınıfını bulmak değil .

I kullanıyordum "hile" daha sonra sınıf bulmak ve çalıştırmak için register_shutdown_function işlevi içinde çalıştırmak için uygulamayı cuasing edildi; Tüm sınıfları tanımlanmış bu noktada gibi çalışıyor ama sistem / script / süreç bu kapatma işlemi sırasında ve burada kod çalıştırmaya başlamak için güvenli olup olmadığını ne olduğunu devlet emin değilim:-p.

İşte şimdiye kadar vardı kod bir örnek:

class Application {

    static $_instance = null;

    public static function getInstance(){
        if ( $this->_instance == null ){
            $this->_instance = new get_called_class();
        }
        return $this->_instance;
    }

}

function findApplicationClass(){
    $classes = get_declared_classes();
    foreach ( $classes as $class ){
        $c = new ReflectionClass ($class);
        if ( $c->isSubclassOf("Application")
        &&    $c->hasMethod("Main") ){
            call_user_func($class . '::Main');
        }
    }
}

function runApplication(){
    findApplicationClass();
}

register_shutdown_function('runApplication');

Ve sonra da, uygulama basitçe:

include "../lib/com/crt0/crt0.php";

class MyApplication extends Application {

    static public function Main ( ){
        echo "Main function";
    }
}

1 Cevap

Sen kirli hileler önlemek için onları yüklemek için sınıfları autoloading metraj yerine sizin include () kullanmalısınız ;)