Im Folgenden finden Sie ein Beispiel für eine Klassenhierarchie und einen Code. Was ich suche, ist eine Möglichkeit zu bestimmen, ob 'ChildClass1' oder 'ChildClass2' die statische Methode whoAmI() aufgerufen hat, ohne sie in jeder Kindklasse neu zu implementieren.Gibt es eine Möglichkeit, die Zielklasse in statischen Methoden zu erkennen?
<?php
abstract class ParentClass {
public static function whoAmI() {
// NOT correct, always gives 'ParentClass'
$class = __CLASS__;
// NOT correct, always gives 'ParentClass'.
// Also very round-about and likely slow.
$trace = debug_backtrace();
$class = $trace[0]['class'];
return $class;
}
}
class ChildClass1 extends ParentClass {
}
class ChildClass2 extends ParentClass {
}
// Shows 'ParentClass'
// Want to show 'ChildClass1'
print ChildClass1::whoAmI();
print "\n";
// Shows 'ParentClass'
// Want to show 'ChildClass2'
print ChildClass2::whoAmI();
print "\n";
@ S.Lott Ich stimme völlig zu, dass eine solche Methode eine undichte Abstraktion wäre, wenn sie in realem Code verwendet wird. In diesem Fall ist die Methode nur dazu da, ein verständliches Beispiel zu geben. Ich möchte die Child-Klasse ermitteln, um statische Methoden für die Instanzerstellung verwenden zu können, die von allen Mitgliedern einer Klassenhierarchie gemeinsam genutzt werden und dennoch den entsprechenden Kind-Konstruktor aufrufen. –