Cet article présente principalement l'espace de noms PHP, qui a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
( PHP 5 >= 5.3.0, PHP 7)
Qu'est-ce qu'un espace de noms ? D'une manière générale, un espace de noms est une façon d'encapsuler des choses. Ce concept abstrait se retrouve à de nombreux endroits. Par exemple, les répertoires sont utilisés dans les systèmes d'exploitation pour regrouper les fichiers associés et agissent comme des espaces de noms pour les fichiers du répertoire. Par exemple, le fichier foo.txt peut exister dans les répertoires /home/greg et /home/other en même temps, mais pas dans le même répertoire Il y a deux fichiers foo.txt. De plus, lors de l'accès au fichier foo.txt en dehors du répertoire /home/greg, il faut mettre le nom du répertoire et le séparateur de répertoire avant le nom du fichier pour obtenir /home /greg /foo.txt. L'application de ce principe au domaine de la programmation est le concept d'espace de noms.
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 :
Conflits de noms entre le code écrit par l'utilisateur et les classes/fonctions/constantes internes de PHP ou les classes/fonctions/constantes tierces.
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é du code source.
Bien que tout code PHP légal puisse être inclus dans un espace de noms, seuls les types de code suivants sont affectés par les espaces de noms, à savoir : les classes (y compris les classes et les traits abstraits), interfaces, fonctions et constantes. L'espace de noms
est déclaré avec le mot-clé namespace. Si un fichier contient un espace de noms, il doit déclarer l'espace de noms avant tout autre code sauf un : le mot-clé declare.
Le seul code légal avant de déclarer un espace de noms est l'instruction declare qui définit l'encodage du fichier source. De plus, tout code non PHP, y compris les espaces, ne peut pas apparaître avant la déclaration de l'espace de noms :
<html> <?php namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句?>
De plus, contrairement aux autres fonctionnalités du langage PHP, le même espace de noms peut être défini dans plusieurs fichiers. le contenu du même espace de noms peut être divisé et stocké dans différents fichiers.
1. Exemple 1
Nous créons d'abord deux fichiers de classe
a.php
<?phpclass Test { public function ceshi(){ echo __FILE__; } }
b.php
<?phpclass Test { public function ceshi(){ echo __FILE__; } }
index.php
<?php require_once("a.php"); require_once("b.php");
Maintenant, exécutez le fichier index.php
Vous trouverez une erreur fatale : Erreur fatale : Impossible de redéclarer la classe Test dans. . . Évidemment, la classe Test ne peut pas être redéclarée car vous l'avez introduite deux fois et les noms de classe dans les deux fichiers sont les mêmes, ce qui est en conflit. À l’heure actuelle, des espaces de noms sont nécessaires pour résoudre ce problème, et c’est simple.
2. Exemple 2
Nous modifions maintenant légèrement les deux fichiers de classe.
a.php
<?php namespace demo1\a\Test;class Test { public function ceshi(){ echo __FILE__; } }
b.php
<?php namespace demo1\b\Test;class Test { public function ceshi(){ echo __FILE__; } }
Le mot-clé d'espace de noms est utilisé pour déclarer l'espace de noms. Exécutez maintenant index.php et constatez qu'il n'y a aucune erreur. Modifiez index.php pour tester l'appel de méthode
index.php
<?php require_once("a.php"); require_once("b.php"); $a1 = new demo1\a\Test\Test(); $a1->ceshi();
<. 🎜>Maintenant, exécutez le fichier index .php
D:phpStudyWWWdemodemo1a.php3. Exemple 3
Maintenant, il y a une autre situation, par exemple, j'ai besoin d'une instance. Que devons-nous faire s'il est difficile de convertir plusieurs fois la classe Test en a.php ? Si nous devons écrire complètement les informations sur l'espace de noms à chaque fois, que devons-nous faire ? Par exemple :<?php require_once("a.php"); require_once("b.php"); $a1 = new demo1\a\Test\Test(); $a2 = new demo1\a\Test\Test(); $a1->ceshi();echo '
'; $a2->ceshi();
index.php
<?php require_once("a.php"); require_once("b.php"); use demo1\a\Test\Test; $a1 = new Test(); $a2 = new Test(); $a1->ceshi(); echo '
'; $a2->ceshi();
Le mot-clé use est utilisé pour introduire des classes et utiliser des espaces de noms. La méthode indique l'utilisation d'une certaine classe. Vous pourrez directement instancier l'opération plus tard
4. Exemple 5
Puis une autre question arrive, de la forme suivante :index .php
<?php require_once("a.php"); require_once("b.php"); use demo1\a\Test\Test; use demo1\b\Test\Test; $a = new Test(); $b = new Test(); $a->ceshi(); echo '
'; $b->ceshi();
Maintenant, exécutez le fichier index.php
Erreur fatale : impossible d'utiliser demo1bTestTest comme test car le nom est déjà dans utiliser dans D:phpStudyWWWdemodemo1index.php en ligne 5
Car bien que l'espace de noms soit utilisé, les deux classes ont le même nom, les deux sont Test, et le programme ne Sachant pas que la deuxième classe Test est la classe Test dans b.php, alors vous utilisez le mot-clé as
index.php
<?php require_once("a.php"); require_once("b.php"); use demo1\a\Test\Test; use demo1\b\Test\Test as bTest; $a = new Test();$b = new bTest(); $a->ceshi();echo '
'; $b->ceshi();
Le mot-clé as définit un alias pour un nom de classe, ce qui peut efficacement empêcher les conflits avec le même nom de classe
5. Exemple 6
Pour exemple, nous sommes dans un Créer un fichier de classe global au même niveau que .php : c.php :c.php
<?php class Test{ public function ceshi(){ echo __FILE__; } }
在index.php文件中这样做即可调用c.php中的test方法
<?php require_once("a.php"); require_once("b.php"); require_once("c.php"); use demo1\a\Test\Test; use demo1\b\Test\Test as bTest; $a = new Test();$a->ceshi(); echo '
'; $b = new bTest(); $b->ceshi(); echo '
'; $c = new \Test(); $c->ceshi(); echo '
';
我们将这种类叫做全局类,如果要使用需要类前面加入反斜杠”\”
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
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!