34

PHP 7 で提供されている匿名クラスはどこで使用でき、使用する必要がありますか? それらのユースケースが見つかりません。

$message = (new class() implements Message {
public function getText() { return "Message"; }});
4

5 に答える 5

39

探している情報は、RFC が提示されているここで見つけることができます。

「ユースケース」セクションの要点は次のとおりです。

  • テストのモックはパイのように簡単になります。複雑なモック API を使用せずに、インターフェースのオンザフライ実装を作成します。
  • これらのクラスは、定義されている範囲外で使用してください
  • 些細な実装でオートローダーをヒットしないようにする
于 2015-07-15T20:10:42.960 に答える
3

私が提供できる良い例は、カスタムクラスを定義せずに、コンテキスト固有のリスナーを1回だけ使用するか、外部リスナー用のアダプターを提供することです。次に例を示します。

$this-apiCaller->call('api_name', $parameters, new class($businessListener) implements ApiListenerInterface 
{ 
    private $listener;

    public function __construct($originalListener)
    {
        $this->listener = $originalListener;
    }

    public function onSuccess($result)
    {
        $this->listener->addLog(new SuccessRecord($result));
    }

    public function onFailure($error)
    {
        $this->listener->addLog(new ErrorRecord($error));
    }
});
于 2017-05-30T18:46:57.340 に答える
0

匿名クラスは、作成とインスタンス化を同時に行う必要があることを除いて、PHP の通常のクラスと同じです。つまり、他のクラスから拡張したり、インターフェイスなどを使用したりできます。

非常に単純なクラスが必要で、他の場所で二度と使用しないと思われる場合は、それが最適です。もう 1 つの理由は、単純なクラス (複数の単純なメソッドを含む) が必要であり、ドキュメントに時間を費やしたくないため、タスクを達成するために外出先でクラスを作成することです。

于 2016-12-04T03:43:20.703 に答える