PHP kütüphaneleri oldukça kötü bir dil ve ad-hoc set olmasına rağmen ... hangi işlevleri ve nesnelerinin rastgele argüman emir ve genellikle dışarı kötü düşünülmüş anlambilimin karışımı sürekli WTF anları demek ....
... Ben programlamak için oldukça eğlenceli ve oldukça her yerde olduğunu itiraf edecektir. (waiting for Server-side JavaScript to flesh out though)
question:
Given a class class RandomName extends CommonAppBase {} is there any way to automatically create an instance of any class extending CommonAppBase without explicitly using new?
Bir kural olarak, sadece PHP dosyası başına bir sınıf tanımı olacaktır. Ve tüm dosyaların sonuna new RandomName() ekleme Ben ortadan kaldırmak istiyoruz şeydir. Uzanan sınıfı yok yapıcısı vardır; sadece CommonAppBase 'nin kurucu denir. CommonAppBase->__construct() apps yürütme kalanını kickstarts.
Herkes bir çözüm bilen varsa garip bir soru, ama güzel olurdu.
Edit
Aşağıdaki yorum daha fazla. Örnekleme yapar kod sınıf dosyası olmayacaktır. Class dosyası sadece ben include('random.class.php') diğer bazı kod istiyorum olmak ve CommonAppBase orada ne olursa olsun sınıf uzanan örneğini.
Herkes my hackish answer Ben ne istediğidir sonra, ama sanest şekilde duyuyorum emin ne için.
Thanks in advance, Aiden
(Btw, benim PHP version 5.3.2 olduğu) herhangi bir cevap ile bir sürümü kısıtlamaları belirtiniz.
Answers
Aşağıdaki tüm auto (php.ini üzerinden veya Apache ile) bir dosyaya eklenebilir, belirli bir ana sınıfının bir sınıf başlatmak.
İlk (teşekkürler dnagirl)
$ca = get_declared_classes();
foreach($ca as $c){
if(is_subclass_of($c, 'MyBaseClass')){
$inst = new $c();
}
}
ve (kabul edilen yanıt, en yakın cevap olarak)
auto_loader();
function auto_loader() {
// Get classes with parent MyBaseClass
$classes = array_filter(get_declared_classes(), function($class){
return get_parent_class($class) === 'MyBaseClass';
});
// Instantiate the first one
if (isset($classes[0])) {
$inst = new $classes[0];
}
}