Maison  >  Article  >  développement back-end  >  Partage de conseils sur l'espace de noms du noyau PHP

Partage de conseils sur l'espace de noms du noyau PHP

黄舟
黄舟original
2017-03-09 09:38:591351parcourir

Dans Wikipédia, la définition de l'espace de noms est : Namespace (anglais : Namespace) signifie identifiant (identifiant) contexte (contexte) .

Un identifiant peut être défini dans plusieurs espaces de noms, et sa signification dans différents espaces de noms n'a pas d'importance. Dans les langages de programmation, un espace de noms est une portée spéciale qui contient des identifiants dans cette portée et est lui-même représenté par un identifiant, de sorte qu'une série d'identifiants logiquement liés sont représentés par un identifiant. Les étendues de fonction et de classe peuvent être considérées comme des espaces de noms implicites, inextricablement liés à la visibilité, à l'accessibilité et à la durée de vie des objets.


L'espace de noms peut être vu comme un moyen d'encapsuler des choses, et vous pouvez également voir l'écriture est une forme d'organisation de la structure du code. Ce concept abstrait et cette forme organisationnelle peuvent être vus dans de nombreuses langues. En PHP, les espaces de noms sont utilisés pour résoudre deux types de problèmes rencontrés lors de la création de code réutilisable tel que des classes ou des fonctions lors de l'écriture de bibliothèques de classes ou d'applications :

1. Il existe un conflit de nom entre le code écrit par l'utilisateur et les classes/fonctions/constantes internes de PHP ou les classes/fonctions/constantes tierces.

2. Créer un nom alias (ou court) pour un nom d'identifiant très long (généralement défini pour atténuer le premier type de problème), Améliorer la lisibilité de code source.


PHP prend en charge les fonctionnalités d'espace de noms à partir de la version 5.3.0. Regardez un exemple de définition et d'utilisation d'espaces de noms :


<?php
namespace tipi;
class Exception {
    public static $var = &#39;think in php internal&#39;;
}
 
const E_ALL = "E_ALL IN Tipi";
 
function strlen(){
    echo &#39;strlen in tipi&#39;;
}
 
echo Exception::$var;
echo strlen(Exception::$var);

1. Exemple :



2. Définition de l'espace de noms


3 . Utilisation de l'espace de noms

Prenons l'appel de fonction comme exemple Lorsqu'une fonction doit être appelée, la fonction zend_do_begin_function_call sera appelée. Dans cette fonction, le nom de la fonction est vérifié lorsque l'espace de noms est utilisé, et la fonction appelée est zend_resolve_non_class_name. Dans la fonction zend_resolve_non_class_name, un jugement est effectué en fonction du type et les résultats pertinents sont renvoyés :

1.Fonction de nom complet : Le programme fera d'abord ce jugement selon que le premier caractère est "". renvoyé directement lors de l'analyse. Par exemple, un appel global commençant par strlen ou un appel similaire à la tipiException définie précédemment.

2.Tous les noms non qualifiés et les noms qualifiés (noms non complets)  : Déterminez s'il s'agit d'un alias basé sur le programme de règles d'importation actuel , et prenez le nom de l'espace de noms correspondant dans la HashTable où les alias sont stockés lors de la compilation, et fusionnez-le avec le nom de la fonction existante. Le stockage et la génération des alias seront expliqués dans le contenu suivant,

3.À l'intérieur de l'espace de noms : Le tout sans import Les noms qualifiés des transformations de règles sont précédées du nom de l'espace de noms actuel. Enfin, il est jugé s'il se trouve dans l'espace de noms actuel. À la fin, le programme renverra un nom de fonction qui fusionne l'espace de noms.

4. Alias/Imports

Autoriser la référence ou l'importation par alias Le nom externe complet est une fonctionnalité importante de l’espace de noms.

Cela ressemble un peu à la façon dont vous pouvez créer des liens symboliques vers d'autres fichiers ou répertoires dans un système de fichiers de type Unix. Prise en charge des espaces de noms PHP Il existe deux manières d'utiliser des alias ou des importations : en utilisant des alias pour les noms de classe ou en utilisant des alias pour les noms d'espace de noms.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn