Est-il mauvais d'utiliser le mot-clé use même si nous n'appelons une fonction qu'une seule fois? Par exemple. J'ai ma propre extension typo3, et j'accède à une fonction principale typo3 dans mon contrôleur, mais une seule fois.

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

Je pourrais aussi utiliser use:

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

À mon avis, la deuxième variante est beaucoup plus propre, mais y a-t-il des problèmes de performances si je n'utilise use que pour un seul appel?

1
Black 24 janv. 2017 à 17:15

4 réponses

Meilleure réponse

En théorie, il ne devrait y avoir aucun impact sur les performances. Vous appelez une fonction (et donc un chargeur automatique) dans les deux sens (c'est là que se trouvera tout impact sur les performances).

Pour expliquer pourquoi, votre instruction use est simplement un alias. Votre chargeur automatique fera le même travail dans les deux cas. Et il sera probablement mis en cache opcode, donc tout impact sur les performances (nous parlons ici de millisecondes, si c'est le cas) ne sera que lors de la première exécution.

2
Machavity 24 janv. 2017 à 14:45

La première option est plus rapide dans le contexte de l'espace de noms et elle pourrait être plus lisible à cause de FQNS (c'est une question de goût). Lorsqu'il y a beaucoup d '"importations", cela peut indiquer un degré trop élevé de dépendance et de rupture du principe de responsabilité unique. J'utilise donc souvent l'espacement de noms en ligne en utilisant FQNS.

Optimiser les performances PHP en utilisant des appels de fonction pleinement qualifiés https://veewee.github.io/blog / optimizing-php-performance-by-fq-function-calls /

Essayez de profiler votre code pour obtenir la réponse.

-1
John Smith 24 janv. 2017 à 15:44

Il est beaucoup plus simple d'importer les classes puis d'utiliser ::class pour les référencer, par exemple ...

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

$message = GeneralUtility::makeInstance(MailMessage::class);
2
fire 24 janv. 2017 à 14:41

Je préfère particulièrement le deuxième choix aussi. Et il n'y a aucun impact sur les performances. Vous pouvez utiliser le second sans aucun souci.

1
Vinicius Dias 24 janv. 2017 à 14:25