2017-01-24 9 views
0

Неправильно ли использовать ключевое слово use, хотя мы вызываем функцию только один раз? . У меня есть собственное расширение typo3, и я обращаюсь к основной функции typo3 в своем контроллере, но только один раз.Должны ли мы использовать «использование», если мы вызываем функцию только один раз?

$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'); 

На мой взгляд, второй вариант намного чище, но есть какие-либо проблемы с производительностью, если я использую use только для одного вызова?

ответ

2

Теоретически, не должно быть никакого удара производительности. Вы вызываете функцию (и, следовательно, автозагрузчик) в любом случае (где и будет производиться удар по производительности).

Чтобы объяснить, почему ваш оператор use является просто псевдонимом. Ваш автозагрузчик будет выполнять ту же работу в любом случае. И, скорее всего, будет кэшироваться код операции, поэтому любое поражение производительности (мы говорим здесь миллисекунды, если это произойдет) будет только в первом запуске.

-1

Первый вариант быстрее в контексте пространства имен и может быть более читаемым из-за FQNS (это вопрос вкуса). Когда существует много «импорта» , это может указывать на слишком высокую степень зависимости и разрыв принципа единой ответственности. Поэтому я часто использую inline namespacing с использованием FQNS.

Оптимизации производительности PHP при помощи полностью квалифицированные вызовы функций https://veewee.github.io/blog/optimizing-php-performance-by-fq-function-calls/

Попробовать свой код, чтобы получить ответ.

+1

Как вы знаете, первый быстрее? У вас есть что поддержать? – Machavity

+0

Нет разницы в производительности. Это точно то же самое. –

+2

Ссылка на потенциальное решение всегда приветствуется, но, пожалуйста, [добавьте контекст вокруг ссылки] (// meta.stackoverflow.com/a/8259), чтобы у ваших коллег было некоторое представление о том, что это такое и почему оно есть. ** Всегда указывайте наиболее релевантную часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. ** Принимайте во внимание, что быть более чем ссылкой на внешний сайт_ является возможной причиной [Почему и почему как удаляются некоторые ответы?] (// stackoverflow.com/help/deleted-answers). – Machavity

1

Я особенно предпочитаю второй выбор. И нет хита производительности. Вы можете использовать вторую, не заботясь.

1

Это намного чище, чтобы импортировать классы, а затем использовать ::class, чтобы ссылаться на них ... например

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

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

Я не уверен, что косвенная ссылка более читаема, чем прямая. Это только вопрос вкуса ИМО. –

+0

В IDE (например, phpstorm) это позволяет легко прыгать в этот класс. Как строка, он не узнает его. – fire

 Смежные вопросы

  • Нет связанных вопросов^_^