2017-01-24 20 views
0

関数を一度呼び出すだけで、キーワードuseを使用するのは悪いですか? など。私は自分のtypo3拡張を持っていて、私のコントローラでtypo3のコア機能にアクセスしていますが、一度だけです。関数を1回だけ呼び出す場合は、 'use'を使用する必要がありますか?

$message = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage'); 

私もuseの使用を作ることができる:

use \TYPO3\CMS\Core\Utility\GeneralUtility; 
... 
$message = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage'); 

私の意見では、第二の変異体は、よりクリーンであるが、私は1つのコールだけのためにuseを利用する場合、パフォーマンスの問題がありますか?

答えて

2

理論的には、パフォーマンスは低下しません。あなたは関数(したがってオートローダー)をどちらかの方法で呼び出すことになります(これはパフォーマンスのヒットになります)。

理由を説明するために、useステートメントは単なるエイリアスです。オートローダはいずれの場合も同じ作業を行います。また、オペコードがキャッシュされている可能性がありますので、パフォーマンスが低下した場合(ここではミリ秒単位で話しています)、最初の実行時のみになります。

-1

名前空間のコンテキストでは、FQNSのために最初のオプションが高速になります(これは趣味の問題です)。 「輸入」が多い場合は、単一責任主義の依存度が高すぎることを示している可能性があります。ですから、私はFQNSを使ってインラインネームスペースを使うことがよくあります。完全修飾機能を使って、PHPのパフォーマンスを最適化

は答えを得るためにあなたのコードをプロファイリングしてみ https://veewee.github.io/blog/optimizing-php-performance-by-fq-function-calls/

呼び出します。

+1

がどのように最初は高速である知っています...クラスをインポートして、例えば、それらを参照するために::classを使用することが非常にクリーンですか?これをサポートする何かがありますか? – Machavity

+0

性能差はありません。それはまったく同じです。 –

+2

潜在的な解決策へのリンクはいつでも歓迎しますが、あなたの仲間のユーザーは、それが何であるか、なぜそこにあるのかを知るために[リンクの前後にコンテキストを追加してください](// meta.stackoverflow.com/a/8259) **ターゲットサイトが到達不能であるか、または永続的にオフラインになる場合に、重要なリンクの最も関連性の高い部分を常に引用します。**外部サイトへのリンク以上であることを考慮すると、[理由と理由いくつかの回答はどのように削除されますか?](// stackoverflow.com/help/deleted-answers) – Machavity

1

私は特に第2の選択も好む。パフォーマンスが低下することはありません。第2のものを気にせずに使うことができます。

1

それは

use TYPO3\CMS\Core\Utility\GeneralUtility; 
use TYPO3\CMS\Core\Mail\MailMessage; 

$message = GeneralUtility::makeInstance(MailMessage::class); 
+0

間接参照が直接参照よりも読みやすくなっているかどうかはわかりません。それは味IMOの唯一の問題です。 –

+0

IDE(phpstormのような)では、これは本当にそのクラスにジャンプするのが簡単です。文字列として認識できません。 – fire

関連する問題