自我/儿童静态构造(hacklang)

时间:2016-02-18 17:21:43

标签: hacklang

猜猜它是不可能的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])

1 个答案:

答案 0 :(得分:2)

您需要使用<<__ConsistentConstruct>>注释您的类 - 因为您可以默认更改子类中构造函数的签名,否则实例化将是不安全的,因为参数列表可能已更改。您可以从official documentationthis blog post I wrote giving a bit more of a narrative around the feature中了解更多信息。

顺便说一下,你可以替换

$class = get_called_class();
$instance = new $class();

有更好的

$instance = new static();