Daha sınıfları ile bir php sınıfını genişletmek için nasıl

0 Cevap php

Bu gibi görmek ne almak için bir yol olup olmadığını merak ediyordum

class main_class extends main_class {...}

Ama php mutlu değildi. (

So then I though to myself lets ask stackoverflow, I'm sure someone will know a solution. Never the less several hours of debugging I self-solved my problem, with only a little code.

Sorun bu yüzden ne yapmam gerekli kullanımı oldu class some_class, varolan bir sınıf geçersiz izin vermez gerçeği de __ get ve __ benim __ construct fonksiyon içine başka bir 2 satır arayın ve ekleyin.

Yani burada benim çözüldü-kodu:

class main_class {
    private $_MODS = array(),...;
    public ...;
    public function __construct(...) {
        ...
        global $MODS_ENABLED;
        $this -> $_MODS = $MODS_ENABLED;
    }
    ...
    public function __get( $var ) {
        foreach ( $this->_MODS as $mod ) 
            if ( property_exists( $mod, $var ) )
                return $mod -> $var;
    }
    public function __call( $method, $args ) {
        foreach ( $this->_MODS as $mod )
            if ( method_exists( $mod, $method ) )
                return call_user_method_array( $method, $mod, $args );
    }
}

Sonra sadece orijinal işlevlerini geçersiz olmadan benim main_class uzatmak için bu koşmak, bu yüzden benim yeni fonksiyonları çalıştırmak var ama ben gerekirse ben orijinal işlevlerini alabilirsiniz:

$MODS_ENABLED=array();
class mod_mail {...}
$MODS_ENABLED[]=new mod_mail;

Şimdi bizim sınıfı yüklemek ve mod bir işlev çalıştırmanızı sağlar:

$obj = new main_class(...);
$obj -> mail("root@localhost", "me@me.me", "Testing a mod.", "This email was sent via My main_class but this is a mod that extended main_class without renaming it.");

Tamam benim de mod-postalar göndermek için değildi ama onun yerine orada Aliased yoladıyla alt etki alanları yönlendirir, ancak kavram burada gösterilen anlıyorum.

Ben sorunu çözüldü sonra Edit: Ben bu yüzden bunu kontrol ve başkasına son derece benzer çözüm bulmak, ama o olduğu gibi bir nüsha olarak işaretlemek etmeyiniz olası bir yinelenen varolup söyleyerek bir yorum gördüm zaten inşa edilmiş bir sınıfa ekleme hakkında soran, ben inşa ederken işlevleri geçersiz kılmak istiyorum. Benim çözüm benim main_class içine inşa sınıfları ve "birleşmeler" onları bir dizi alır, bu yöntem özgün fonksiyonları rezerv yok ama ben de by-pass __ çağrı işlevini başka bir işlevi kullanarak özgün işlevleri çağırabilirsiniz.

Cevapları yayınlanmıştır herkese teşekkürler.

0 Cevap