0

Hacklang には無理な設計だと思いませんか?

<?hh //strict

 abstract class Foo {

    public static function bar():void {

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

        // do stuff

    }
}

クラス名 'Foo' では new を使用できません。__construct 引数は、子クラスでの一貫性が保証されていません (Typing[4060])

4

1 に答える 1

2

クラスに注釈を付ける必要があります<<__ConsistentConstruct>>-- デフォルトでサブクラスのコンストラクターの署名を変更できるため、引数リストが変更される可能性があるため、インスタンス化は安全ではありません。詳細については、公式ドキュメントまたは私が書いたこのブログ投稿で、この機能に関する説明をもう少し詳しく読むことができます。

余談ですが、交換できます

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

はるかに良い

$instance = new static();
于 2016-02-18T23:18:12.297 に答える