6 votes

Qu'est-ce qu'un espace de noms et comment est-il implémenté en PHP?

J'ai entendu dire que la dernière version de PHP prend en charge les espaces de noms. Je sais que les variables définies dans la portée globale n'ont pas de namespace, alors comment crée-t-on une variable dans un espace de noms différent?

Est-ce simplement une façon de catégoriser les variables/fonctions?

24voto

Jake McGraw Points 16515

Les espaces de noms sont un mécanisme de langage de programmation pour organiser les variables, les fonctions et les classes. PHP 5.3 ajoute la prise en charge des espaces de noms, que je vais démontrer dans l'exemple suivant :

Disons que vous aimeriez combiner deux projets qui utilisent le même nom de classe User, mais qui ont des implémentations différentes pour chacun :

// Code pour le Projet Un (proj1.php)
userId;
    }
  }
  $user = new User;
  echo $user->getUserId();
?>

// Code pour le Projet Deux (proj2.php)
user_id;
?>

Pour les versions de PHP inférieures à 5.3, vous devriez vous donner la peine de changer le nom de la classe pour toutes les instances de la classe User utilisées par l'un des projets pour éviter une collision de noms :

Pour les versions de PHP supérieures ou égales à 5.3, vous pouvez utiliser des espaces de noms lors de la création d'un projet, en ajoutant une déclaration d'espace de noms :

user_id; // Utiliser l'implémentation de ProjectOne
?>

Pour plus d'informations :

3voto

CMS Points 315406

Un espace de noms vous permet d'organiser le code et vous offre un moyen d'encapsuler vos éléments.

Vous pouvez visualiser les espaces de noms comme un système de fichiers utilise des répertoires pour regrouper des fichiers connexes.

Essentiellement, les espaces de noms vous permettent de regrouper des classes, des fonctions et des constantes connexes.

Ils aident également à éviter les collisions de noms entre vos classes/fonctions/constantes PHP, et améliorent la lisibilité du code en évitant les noms de classe excessivement longs.

Exemple de déclaration d'espace de noms :

3voto

thomasrutter Points 42905

Les espaces de noms résolvent le problème des collisions de noms lors de l'importation de classes et de fonctions à partir de bibliothèques.

Sans espaces de noms, si vous incluez deux bibliothèques qui définissent par hasard une fonction/classe avec le même nom (c'est-à-dire deux bibliothèques qui incluent toutes les deux une classe appelée 'utilisateur'), cela échouera.

Sans le support des espaces de noms en PHP, la plupart des bibliothèques ont pris l'habitude de préfixer les noms de leurs fonctions/classes avec quelque chose de probablement unique, dans le but d'éviter les collisions de noms. Le problème est que cela crée des noms de fonctions ou de classes plus longs.

L'exemple donné ici est celui de la classe d'exception:

PEAR_Form_Loader_Validate_Table_Element_Validator_Exception.

Vous pouvez importer à partir d'un long espace de noms dans votre propre portée locale en tant qu'alias en utilisant le mot clé 'AS' - un nom que vous choisissez. Ainsi, vous pouvez toujours avoir un nom court de classe de votre choix dans votre portée locale.

Le code suivant applique un 'alias' appelé DbConnection à Zend::DB::Connection.

use Zend::DB::Connection as DbConnection

1voto

Luca Matteis Points 19338

Les espaces de noms sont souvent utilisés avec les bibliothèques, la capacité de référencer le code de la bibliothèque avec 1 seul espace de noms aide à ne pas perturber ceux qui sont déjà utilisés.

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