Maison > développement back-end > tutoriel php > Introduction aux espaces de noms PHP

Introduction aux espaces de noms PHP

不言
Libérer: 2023-04-02 13:32:02
original
1262 Les gens l'ont consulté

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

Qu'est-ce qu'un espace de noms PHP ?

( 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 :

  1. Conflits de noms 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é 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; // 致命错误 - 命名空间必须是程序脚本的第一条语句?>
Copier après la connexion

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__;
    }
}
Copier après la connexion
Copier après la connexion

b.php

<?phpclass Test
{    public function ceshi(){        echo __FILE__;
    }
}
Copier après la connexion
Copier après la connexion

index.php

<?php
require_once("a.php");
require_once("b.php");
Copier après la connexion

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__;
    }
}
Copier après la connexion

b.php

<?php
namespace demo1\b\Test;class Test
{    public function ceshi(){        echo __FILE__;
    }
}
Copier après la connexion

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();
Copier après la connexion

<. 🎜>Maintenant, exécutez le fichier index .php

D:phpStudyWWWdemodemo1a.php

3. 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();
Copier après la connexion
Bien qu'il n'y ait pas d'erreur, vous trouverez cela plus gênant. Vous devez écrire le nom complet de l'espace de noms à chaque fois. Bien qu'il n'y ait pas d'erreur et que vous puissiez ctrl+c, ctrl+. v, ce n'est pas très beau (^_^).

Vous pouvez le faire

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();
Copier après la connexion

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();
Copier après la connexion

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();
Copier après la connexion

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__;
    }
}
Copier après la connexion

在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 '
';
Copier après la connexion

我们将这种类叫做全局类,如果要使用需要类前面加入反斜杠”\” 

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于PHP多态的理解

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal