У меня есть абстрактный класс, в котором есть функция, которая использует позднюю статическую привязку PHP, следующим образом:
abstract class MetaComponent {
public static function do(...$args) {
return new static(...$args);
}
}
Затем я реализовал абстрактный класс следующим образом:
class ¬Text extends MetaComponent {
private function __construct(string $text) {
$this->text = $text;
}
public function render() {
echo $this->text;
}
}
Я хотел, чтобы никто не мог создать экземпляр ¬Text
напрямую, поэтому я сделал функцию __construct
закрытой.Тем не менее, любой должен иметь возможность создать его экземпляр через ¬Text::do('Lorem Ipsum')
.Вот почему я использовал Late Binding Static в MetaComponent::do()
.
Однако я получаю следующую ошибку:
PHP Fatal error: Uncaught Error: Call to private ¬Text::__construct() from context 'MetaComponent' in /xxx/MetaComponent.php:9
Есть ли способ вызвать конструкториз абстрактного класса, не позволяя __construct
быть вызванным напрямую?