PHP后期绑定静态,带有私有__construct

时间:2018-09-26 00:17:50

标签: php abstract-class late-static-binding

我有一个抽象类,该类具有使用PHP的Late Static Binding的函数,如下所示:

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')实例化它。这就是为什么我在MetaComponent::do()中使用了Late Binding Static。

但是,出现以下错误:

PHP Fatal error: Uncaught Error: Call to private ¬Text::__construct() from context 'MetaComponent' in /xxx/MetaComponent.php:9

是否有一种方法可以从抽象类中调用构造函数,同时防止直接调用__construct

0 个答案:

没有答案