Я хотел бы иметь возможность создания экземпляра класса, используя имя класса, хранящееся в свойстве другого класса, и я хочу сделать это с одной строкой кода, как в комментариях в коде ниже (и он должен работать по крайней мере на одном недавнем версия PHP 5). Это возможно?
<?php
class Foo {
public function doFoo() {
echo "foo\n";
}
}
class Bar {
function __construct($className) {
$this->className = $className;
}
public function doBar() {
//INSTEAD OF THESE TWO LINES...
//$className = $this->className;
//$instance = new $className();
//I WOULD LIKE THIS (OR SOME OTHER) ONE-LINER TO WORK:
$instance = $this->className();
$instance->doFoo();
}
}
$bar = new Bar('Foo');
$bar->doBar();
ОЖИДАЕМЫЙ ВЫХОД:
foo
В коде есть очевидная опечатка, которая вызывает конструктор вместо функции и может быть исправлена следующим образом:
$instance = new $this->className();
Это делает трюк.
Других решений пока нет …