PHP

2013-05-21 17 views
7
tüm genişletilmiş Sınıfları alın

Ben böyle bir sınıf var ki çocukları almak için bir yolu var mıPHP

<? 
class SomeNewClass extends ObjectModel { 
} 

class SomeOtherNewClass extends ObjectModel { 
} 

(SomeNewClass & SomeOtherNewClass) ObjectModel sınıfına göre mi?

+0

Hayır, doğrudan bunu yapamaz. Niçin buna ihtiyacın var? Bunu yapmanın makul bir yolu, bunu ayrı bir yapılandırma dosyasında izlemektir, ancak bu çok sıkıcı. Mirasın noktası, ayrıntıları gizlemek ve miras zincirinin bu hedefle doğrudan çatışmasını talep etmektir. Bilmemelisin. – Halcyon

+0

Yeni çocukları 'parent :: __ construct()' aracılığıyla kaydedebilirsiniz, ancak bu durum hantal olabilir. Niyeti açıklayabilir misin? –

+0

Bir PHP-CMS yapıyorum. Ve içindeki her model ObjectModel'den miras alır. Şimdi, eğer bir kontrolör dinamik bir yolda olabilecek belirli bir modeli aramalıysa, o sınıfı aramak ve kullanmak güzel olurdu. Örneğin: SomeNewClass modeli /_components/sample/_models/somenewclass.php altında olabilir veya /_brain/_components/navigation/_models/somenewclass.php –

cevap

11
class ObjectModel { 
} 

class SomeNewClass extends ObjectModel { 
} 

class SomeOtherNewClass extends ObjectModel { 
} 

class SomeOtherNewClassLol extends ObjectModel { 
} 

function get_extends_number($base){ 
    $rt=0; 
    foreach(get_declared_classes() as $class) 
     if(is_subclass_of($class,$base)) $rt++; 
     return $rt; 
} 

echo get_extends_number('ObjectModel'); //output: 3 

Evet, bunu yapabilirsiniz, DEMO

+1

ile bu listede yineleyin 'SomeOtherNewClassLol'' SomeOtherNewClass' genişletirse aynı sonucu elde edersiniz. –

+0

@AlixAxel SomeOtherNewClassLol, SomeOtherNewClass'ı genişletirse, ObjectModel'i de genişletirsiniz, daha sonra özel olmayan yöntemleri/provaları kullanılabilir – Sam

+0

@AlixAxel Bu durumda, "SomeOtherNewClassLol" hala ObjectModel öğesinin devralınmasıdır. Hala bir torun olsa bile hala bir soyundan olduğu gibi, ObjectModel'de oluşturulan yöntemlere/özelliklere erişebilir. –

3

Sen get_declared_classes() tarafından döndürülen tüm sınıfları yineleme ve kendi Reflection (Reflection::isSubclassOf)

teftiş Ama olabilir - Özdevinimli kullanırken bu işe yaramaz. Bu downvoted almak için gidiyor ama yolumuzu kesmek eğer

0

emin değil: 1

üzerindeki her sınıf için

  1. get_declared_classes
  2. get_parent_class Pek hoş değil, ama eğer Çocuk sınıfları yüklenir, bu mümkündür.