猜猜它是不可能的Hacklang设计?
<?hh //strict
abstract class Foo {
public static function bar():void {
$class = get_called_class();
$instance = new $class();
// do stuff
}
}
不能在classname上使用new&#39; Foo&#39 ;; __construct参数不保证在子类中保持一致(键入[4060])
答案 0 :(得分:2)
您需要使用<<__ConsistentConstruct>>
注释您的类 - 因为您可以默认更改子类中构造函数的签名,否则实例化将是不安全的,因为参数列表可能已更改。您可以从official documentation或this blog post I wrote giving a bit more of a narrative around the feature中了解更多信息。
顺便说一下,你可以替换
$class = get_called_class();
$instance = new $class();
有更好的
$instance = new static();