2017-05-09 4 views
0

php7では、依存関係注入コンテナまたはサービスコンテナからインスタンスを取得するときに、ハードコードされた文字列ではなく::classを使用する方が良いですか?もしそうなら、なぜですか?たとえば、次の行が好ましいハードコードされた文字列ではなく、クラスを使用する方が良いですか?

のとおりです。

$diContainer->get(Namespace\SubNamespace\Class::class); 
$serviceContainer->get(Namespace\SubNamespace\Class::class); 

ではなく、以下:

$diContainer->get('Namespace\SubNamespace\Class'); 
$serviceContainer->get('Namespace\SubNamespace\Class'); 

私はコードはPHPので、迅速にコンパイルすることを信念にハードコードされた文字列を使用してきました::classキーワードを解釈する必要はありません。しかし、私はまた、::classを使用する多くの新しいphp7コードを見てきました。

もっと広く言えば、完全修飾されたクラス名が必要な場合はいつも、ハードコードされた文字列ではなく::classを使用する方が良いでしょうか?

答えて

3

::classを使用すると、エイリアス名から完全修飾名に簡単に移動できます。たとえば、:

これは簡略化したものの完全なクラス名を繰り返す必要がないので便利です。結果はどちらかの方法で文字列になります。おそらく、クラスや名前空間の名前を変更する場合には、上記の例では複数回ではなく名前を1回変更するだけで済むので、コードのエラーが起こりにくくなります。パフォーマンスはあなたの懸念事項の中で最小限に抑えられるべきです。実世界のシナリオでパフォーマンスの影響を測定することさえできない可能性があります。

私は可能な限りハードコードされた文字列を避けようとしています。単に意味のない不透明なブロブであり、PHPやIDE、その他のツールでは静的型チェックを行うことができません。他の方法であなたを助けてください。

+1

ありがとうございます。私は特に「意味のない不透明な塊」推論を好む。 –

関連する問題