Diese PHP-Frage bezieht sich auf this question, ist aber ein bisschen anders. Ich habe eine statische Factory-Methode namens create()
, die eine Klasseninstanz instanziiert. Ich möchte, dass die Methode eine Instanz der (Sub-) Klasse, auf der sie aufgerufen wird, dynamisch instanziiert. Daher muss die Klasse, die instanziiert wird, zur Laufzeit bestimmt werden. Aber ich möchte dies tun, ohne die statische Factory-Methode in der Unterklasse neu definieren zu müssen (und dies wäre in meinem Beispiel vollkommen gültig, da die Unterklasse keine neuen Datenelemente zum Initialisieren hat). Ist das überhaupt möglich?PHP statische Factory-Methode: Instanz der aufrufenden Klasse dynamisch instanziieren
class Foo {
private $name;
public static function create($name) {
//HERE INSTED OF:
return new Foo($name);
//I WANT SOMETHING LIKE:
//return new get_class($this)($name);//doesn't work
//return self($this);//doesn't work either
}
private function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
// the following class has no private data, just extra methods:
class SubFoo extends Foo {
public function getHelloName() {
echo "Hello, ", $this->getName(), ".\n";
}
}
$foo = Foo::create("Joe");
echo $foo->getName(), "\n"; // MUST OUTPUT: Joe
$subFoo = SubFoo::create("Joe");
echo $subFoo->getHelloName(), "\n"; // MUST OUTPUT: Hello, Joe.
Weil Sie Objekt 'SubFoo' erstellen müssen, lesen Sie über späte Statusbindung ... Und es gibt einen Punkt der Frage. 'statisch' ist auch gut. –
tschuldigung ich meine 'statisch' nicht' selbst' –
Aber ich verstehe nicht downvote. –