To pytanie PHP jest powiązane z this question, ale jest nieco inne. Mam statyczną metodę fabryczną o nazwie create()
, która tworzy instancję klasy. Chcę, aby metoda dynamicznie tworzyła instancję klasy (pod), na której jest wywoływana. Tak więc klasa, którą tworzy, musi być określona w czasie wykonywania. Ale chcę to zrobić bez konieczności ponownego zdefiniowania statycznej metody fabryki w podklasie (i byłoby to całkowicie poprawne w moim przykładzie, ponieważ podklasa nie ma żadnych nowych elementów danych do zainicjowania). Czy to w ogóle możliwe?Metoda statycznej fabryki PHP: dynamicznie stwórz instancję klasy wywołującej
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.
Ponieważ musisz utworzyć obiekt 'SubFoo', przeczytaj o późnym wiązaniu stanu ... I jest pewien punkt zapytania. "static" jest również dobre. –
Przepraszam, mam na myśli 'static' nie' self' –
Ale nie rozumiem. –