2017-01-24 19 views
1

ファクトリ関数を使用してanonymous classをインスタンス化したいと思います。悲しいことに、私の単純なアプローチは、最後の行のためのパースエラーParse error: syntax error, unexpected 'class'をスロー:匿名クラスのファクトリ関数を呼び出す

class Foo { 
    static function factory() { 
     return new static; 
    } 
} 
(class extends Foo {})::factory(); 

は、この可能性のようなものですか?あるいは、同じ目標に達するための別のアプローチがありますか?

+0

'new static()'を返します。 – Robbie

+0

'new class extends ... ' – shudder

答えて

1

2つの問題:

  1. あなたは(括弧付きIE)new class()構文を使用して静的を返す必要が

  2. あなたはまた、new

と匿名のクラスを生成する必要がありますコード:

class Foo { 
    static function factory() { 
     return new static(); 
    } 
} 
(new class extends Foo {})::factory(); 
+0

これはクラスを2回インスタンス化しますか?そして、工場はもう意味がありません(最初のオブジェクトを直接使うことができるので)。 – flori

+0

私は同意します。あなたがコーディングしたものはそのままの状態で無意味です。実際、このようなクラスの静的なコピーを作成する前に、クラス名を取得して新しいクラスを作成するだけでした。あなたが何をしようとしているのかはっきりしていませんが、fooがさらに拡張された静的なプロパティ(その場合はもっと意味をなさない)があったので、より充実したコードを適用することができます。 – Robbie

+0

@Robbieは私を許していますが、なぜ彼は中括弧でクラスを返さなければならなかったのですか?新しいキーワードで匿名のインスタンスを作成する必要があるという問題があります。 – hassan

関連する問題