Jestem pewien, że poniższe rozwiązanie lub coś takiego byłoby dobrym rozwiązaniem problemu. IMHO, można wykonać następujące czynności (co jest rodzajem wzorca obserwatora):
1- zdefiniować interfejs nazwać Fooable
interface Fooable{
public function doSomething();
}
2- Wszystko twój cel klasy muszą implementować ten interfejs:
class Fooer implements Fooable{
public function doSomething(){
return "doing something";
}
}
class SpecialFooer implements Fooable{
public function doSomething(){
return "doing something special";
}
}
3- Zrób rejestratora klasy nazywają to FooRegisterar
class FooRegisterar{
public static $listOfFooers =array();
public static function register($name, Fooable $fooer){
self::$listOfFooers[$name]=$fooer;
}
public static function getRegisterdFooers(){
return self::$listOfFooers;
}
}
4- Gdzieś w skrypcie startowym lub jakiś skrypt, który jest zawarty w skrypcie startowym:
FooRegisterar::register("Fooer",new Fooer());
FooRegisterar::register("Special Fooer",new SpecialFooer());
5- w głównym kodzie:
class FooClient{
public function fooSomething(){
$fooers = FooRegisterar::getRegisterdFooers();
foreach($fooers as $fooer){
$fooer->doSomthing();
}
}
}
http://stackoverflow.com/questions/538863/get-the-name-of-a-child-class-in-php –
Niezupełnie, wymaga to uruchomienia funkcji konstruktora, szukam zadeklarowanych klas, które niekoniecznie zostały jeszcze uruchomione. – Trey
Możliwy duplikat [Uzyskaj wszystkie rozszerzone klasy w PHP] (http: // stack overflow.com/questions/16680040/get-all-extended-classes-in-php) – jeremy