PHP позднего связывания статического с частной __construct - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть абстрактный класс, в котором есть функция, которая использует позднюю статическую привязку 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 быть вызванным напрямую?

...