我有一个抽象类,该类具有使用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
?