279 votes

Quels sont les espaces de noms ?

Quels sont les espaces de noms PHP ?

Quels sont les espaces de noms en général ?

Une réponse de profane avec un exemple serait formidable.

633voto

cbednarski Points 3579

Namespacing ne de fonctions et de classes de ce champ d'application le fait pour les variables. Il vous permet d'utiliser la même fonction ou un nom de classe dans les différentes parties d'un même programme sans provoquer une collision de nom.

En termes simples, pensez à un espace de noms que le nom d'une personne. Si il y a deux personnes nommé "John", vous pouvez utiliser leur nom de famille pour les distinguer.

Le Scénario

Supposons que vous écrivez une application qui utilise une fonction nommée output(). Votre output() fonction prend tout le code HTML sur votre page et l'envoie à l'utilisateur.

Plus tard, sur votre demande est plus grand et que vous souhaitez ajouter de nouvelles fonctionnalités. Vous ajoutez une bibliothèque qui vous permet de générer un flux RSS. Cette bibliothèque utilise également une fonction nommée output() à la sortie de l'aliment final.

Lorsque vous appelez output(), comment PHP savoir si l'utilisation de votre output() de la fonction ou de la RSS de la bibliothèque de l' output() fonction? Il n'a pas. Sauf si vous utilisez les espaces de noms.

Exemple

Comment pouvons-nous résoudre à avoir deux output() fonctions? Simple. Nous nous en tenons chaque output() fonction dans son propre espace de noms.

Qui ressemblerait à quelque chose comme ceci:

namespace MyProject;

function output() {
    # Output HTML page
    echo 'HTML!';
}

namespace RSSLibrary;

function output(){
    # Output RSS feed
    echo 'RSS!';
}

Plus tard, lorsque nous voulons utiliser les différentes fonctions, nous utiliserons:

\MyProject\output();
\RSSLibrary\output();

Ou nous pouvons déclarer que nous sommes dans l'un des espaces de noms et puis on peut appeler juste que l'espace de noms de l' output():

namespace MyProject;

output(); # Output HTML page
\RSSLibrary\output();

Pas D'Espaces De Noms?

Si nous n'avions pas les espaces de noms que nous aurions (peut-être) changer beaucoup de code à tout moment, nous avons ajouté une bibliothèque, ou venir avec de fastidieux préfixes à faire de nos noms de fonction unique. Avec des espaces de noms, nous pouvons éviter le casse-tête de collision de nom lors du mélange de la troisième partie du code avec nos propres projets.

22voto

alex Points 186293

Un espace de noms permet de placer un tas de code sous un nom et ne pas avoir de conflits de noms avec des classes, des fonctions et des constantes.

Il permet à votre code à vivre dans cet espace de noms.

PHP utilise le quelque peu controversé caractère \ de spectacle de l'espace de noms niveaux. Les gens ont eu dans les bras car il est également utilisé comme un caractère d'échappement.

Pour utiliser l'espace de noms en PHP, utiliser quelque chose comme cela, en haut de votre fichier.

namespace my\namespace;

Vous pouvez trouver beaucoup plus d'informations sur la documentation officielle de PHP pour les espaces de noms.

8voto

Kau-Boy Points 5512

Il y a des techniques comme des espaces de noms dans d'autres langages de programmation (comme les packages en Java). Ils sont utilisés pour être en mesure d'avoir plusieurs classes avec le même nom wihtin un projet.

À partir de la documentation php (http://www.php.net/manual/en/language.namespaces.rationale.php):

Quels sont les espaces de noms? Dans la définition la plus large des espaces de noms sont un moyen d'encapsuler des éléments. Ceci peut être vu comme un concept abstrait, dans de nombreux endroits. Par exemple, dans un système d'exploitation répertoires servir de groupe de fichiers liés, et d'agir comme un espace de noms pour les fichiers à l'intérieur. À titre d'exemple concret, le fichier foo.txt peut exister à la fois dans le répertoire /home/greg et dans /home/autre, mais les deux copies de foo.txt ne peuvent pas coexister dans le même répertoire. En outre, pour accéder à la foo.txt fichier en dehors de l' /home/greg répertoire, on doit ajouter le nom du répertoire pour le nom de fichier en utilisant le séparateur de répertoire pour obtenir /home/greg/foo.txt. Ce même principe s'étend à des espaces de noms dans le monde de la programmation.

5voto

staticsan Points 14435

Un espace de Noms fonctionne comme un répertoire. Vous savez comment vous pouvez mettre des fichiers dans un répertoire avec le même nom que les fichiers dans le parent (ou à tout autre répertoire? Ainsi, un espace de noms vous permet de le faire au sein d'une application pour les variables, de fonctions et de classes.

Il y a un peu d'une tendance en PHP il y a peu, pour des classes de fonctions statiques. La seule façon d'appeler l'une de ces fonctions a été par la préfixation d'un appel avec le nom de la classe. C'était un essai primitif à des espaces de noms, mais avec pas beaucoup d'avantages.

2voto

Alexander Points 781

Un espace de noms, fondamentalement vous permet de placer du code dans un récipient. Cela permettra d'éviter des problèmes avec les deux fonctions (ainsi que les classes et les variables) qui partagent le même nom.

Ils sont utiles lorsque vous travaillez quand de plus grandes applications pour éviter les problèmes avec des morceaux de code qui partagent le même nom.

Par exemple, disons que nous voulions deux fonctions appelées "TheMessage" . Ces deux serait d'impression (echo) des messages différents à chaque. Normalement, ce serait la cause d'une erreur de syntaxe, que vous ne pouvez pas avoir deux fonctions qui portent le même nom.

Pour résoudre ce problème, vous pouvez placer ces fonctions dans les espaces de noms distincts. Cela vous permettra d'utiliser les deux fonctions sans erreurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X