J'ai récemment commencé à utiliser des espaces de noms en PHP. Quand je les ai vus pour la première fois, je pensais que leur syntaxe était moche et je ne les utiliserais jamais. Cependant, j'ai créé un chargeur automatique (spl_autoload_register) qui fait en sorte que je n'ai plus jamais à écrire une instruction include / require.
J'aime les espaces de noms, mais y a-t-il un avantage objectif par rapport aux instructions include / require, ou s'agit-il exactement de la même méthode pour atteindre le même objectif?
new \Vendor\Namespace\Class()
sans instruction require plus tôt dans la méthode ou la classe.Réponses:
Les espaces de noms ne sont pas réservés aux classes de chargement automatique. Ils empêchent également les conflits de noms. En fait, c'est leur objectif principal.
Supposons que vous ayez un projet qui nécessite une classe nommée
User
pour stocker des informations sur les utilisateurs de votre application, mais un plugin utilise également une classe (différente) nomméeUser
pour stocker des informations. Les espaces de noms vous permettent de créer votre classe dans un espace de noms (par exempleMyApp
) et de laisser le plugin utiliser un autre espace de noms (par exempleCoolPlugin
). Le code dans l'MyApp
espace peut simplement faire référence àUser
(par exemple,new User();
), tout comme le code dans l'CoolPlugin
espace; chacun obtiendra le résultat attendu. Lorsque vous devez utiliser du code provenant d' un autre espace de noms, vous n'avez qu'à le préfixer. Par exemple, le code dans l'CoolPlugin
espace peut accéder à laUser
classeMyApp
vianew \MyApp\User();
L'alternative est que chaque classe a besoin d'un nom complexe partout , comme
class MyApp_User
etclass CoolPlugin_User
. Les espaces de noms vous permettent de simplifier les choses la plupart du temps et d'éviter les conflits de nommage tout le temps.Edit: Pour répondre à la question, "Y a-t-il une différence de performances entre les deux?"
Pas significatif, non. Je ne l'ai pas comparé, mais il y a probablement une différence au niveau nanoseconde. Cela dit, sacrifier la qualité du code pour des réglages de performances très petits n'est pas une bonne stratégie, vous devez donc utiliser les espaces de noms malgré tout. Pour des références de types de problèmes similaires, consultez PHPbench.com et cette réponse StackOverflow .
Votre code doit être incroyablement serré et extrêmement sensible au temps (pensez au trading à haute fréquence ou à la gestion des réactions nucléaires) avant de vous soucier de la micro-optimisation dans ce type de contexte. Si c'est vraiment sensible au temps, vous devriez probablement coder en c ou même en assembleur , pas dans des langages interprétés comme PHP.
la source