PHP は、構成内の無名関数をコンパイル時にクロージャー クラスのインスタンスに変換するため、すべての要求でこれを行います。create_function
これは、実行時に関数を作成するものとは異なります。ただし、クロージャーはコンパイル時にこれを行うため、opcache キャッシュにある必要があり、問題にはなりません。
ファクトリとクロージャーを使用してサービスを構築することのパフォーマンスへの影響に関しては、まず、サービスを要求した回数に関係なく、サービスは要求ごとに 1 回しか構築されないことを覚えておく必要があります。クロージャとファクトリを使用してサービスを取得する簡単なベンチマークを実行したところ、次の結果が得られました (数回実行したところ、すべての結果がほぼ同じ値でした)。
Closure: 0.026999999999999ns
Factory: 0.30200000000002ns
これらはナノ秒、つまり 10 -9秒です。基本的に性能差は小さいので、実質的な差はありません。
また、ZF2 はモジュール全体の構成をクロージャーでキャッシュできません。純粋にファクトリを使用すると、毎回構成ファイルをロードしてマージすることを心配するのではなく、構成全体をマージしてキャッシュし、要求ごとに単純なファイルを読み取ることができます。これによるパフォーマンスへの影響は測定していませんが、いずれにしてもごくわずかだと思います。
ただし、主に可読性と保守性のためにファクトリを好みます。ファクトリを使用すると、大量のクロージャーがあちこちにある大規模な構成ファイルになることはありません。
確かに、クロージャーは迅速な開発には最適ですが、コードを読みやすく、保守しやすいものにしたい場合は、ファクトリに固執することをお勧めします。