Explication détaillée de l'espace de noms en PHP

不言
Libérer: 2023-04-03 15:08:02
original
1337 Les gens l'ont consulté

Cet article vous présente une explication détaillée de l'espace de noms en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

L'espace de noms PHP n'est disponible qu'après php5.3. Ce concept existe en C# depuis longtemps. L'espace de noms en PHP est en fait le même concept que C#.

Pourquoi devons-nous utiliser un espace de noms en php ?

Supposons que si l'espace de noms n'est pas utilisé, le nom de chaque classe d'un projet doit être corrigé. Car lorsque PHP est nouveau, qu'il appelle autoload ou qu'il appelle une classe chargée, il existe un fichier correspondant au nom de la classe. Ainsi, lorsqu'il n'y a pas d'espace de noms, nous penserons à différentes règles de dénomination pour distinguer les différentes classes, comme project1_school1_class1_Student ou project2_school_class_Student.

Après avoir introduit l'espace de noms, cela peut être efficacement évité. Un espace de noms équivaut à correspondre à un chemin de fichier. Lors de la recherche de cette classe, le chemin de fichier correspondant sera recherché pour le fichier de définition de classe.

Définition et utilisation de l'espace de noms

Définition :

<code class="language-php"><?php<br/><br/>namespace Myproject;</code>
Copier après la connexion

ou

<code class="language-php"><?php<br/><br/>namespace Myproject {<br/><br/>}</code>
Copier après la connexion

Utilisation :

<code class="language-php"><?php<br/><br/>use Myproject/School;</code>
Copier après la connexion
<code class="language-php"><?php<br/><br/>use Myproject/School as School1;   // 别名</code>
Copier après la connexion

les espaces de noms sont résolus au moment de l'exécution. use est équivalent à une instruction et n’est ni analysé ni chargé. Par exemple, l'exemple suivant :

test.php

<code class="language-php"><?php<br/>use my\name;<br/>require_once("/home/yejianfeng/handcode/test/namespace1.php");<br/>$a = new my\name\A();<br/>$a->Print1();</code>
Copier après la connexion

namespace1.php

<code class="language-php"><?php<br/>namespace my\name;<br/>class A {<br/>        public function Print1(){<br/>                echo 11;<br/>        }<br/>}</code>
Copier après la connexion

Bien que require_once soit en cours d'utilisation, il peut s'exécuter normalement car le programme uniquement Chargez uniquement l'espace de noms myname

classe globale et classe d'espace de noms

si vous souhaitez créer une nouvelle classe globale, utilisez new A()

Si vous souhaitez créer une nouvelle classe d'espace de noms, utilisez new mynamespaceA()

L'ordre des espaces de noms

Puisqu'il existe un espace de noms, le plus sujet aux erreurs Quand il est Il est temps d'utiliser une classe, il est temps de déterminer à quoi ressemble le chemin de recherche de cette classe.

Si vous parvenez à comprendre cet exemple dans le manuel, vous pouvez comprendre l'ordre de recherche.

<code class="language-php"><?php<br/>namespace A;<br/>use B\D, C\E as F;<br/><br/>// 函数调用<br/><br/>foo();      // 首先尝试调用定义在命名空间"A"中的函数foo()<br/>            // 再尝试调用全局函数 "foo"<br/><br/>\foo();     // 调用全局空间函数 "foo" <br/><br/>my\foo();   // 调用定义在命名空间"A\my"中函数 "foo" <br/><br/>F();        // 首先尝试调用定义在命名空间"A"中的函数 "F" <br/>            // 再尝试调用全局函数 "F"<br/><br/>// 类引用<br/><br/>new B();    // 创建命名空间 "A" 中定义的类 "B" 的一个对象<br/>            // 如果未找到,则尝试自动装载类 "A\B"<br/><br/>new D();    // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象<br/>            // 如果未找到,则尝试自动装载类 "B\D"<br/><br/>new F();    // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象<br/>            // 如果未找到,则尝试自动装载类 "C\E"<br/><br/>new \B();   // 创建定义在全局空间中的类 "B" 的一个对象<br/>            // 如果未发现,则尝试自动装载类 "B"<br/><br/>new \D();   // 创建定义在全局空间中的类 "D" 的一个对象<br/>            // 如果未发现,则尝试自动装载类 "D"<br/><br/>new \F();   // 创建定义在全局空间中的类 "F" 的一个对象<br/>            // 如果未发现,则尝试自动装载类 "F"<br/><br/>// 调用另一个命名空间中的静态方法或命名空间函数<br/><br/>B\foo();    // 调用命名空间 "A\B" 中函数 "foo"<br/><br/>B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法<br/>            // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"<br/><br/>D::foo();   // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法<br/>            // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"<br/><br/>\B\foo();   // 调用命名空间 "B" 中的函数 "foo" <br/><br/>\B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法<br/>            // 如果类 "B" 未找到,则尝试自动装载类 "B"<br/><br/>// 当前命名空间中的静态方法或函数<br/><br/>A\B::foo();   // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法<br/>              // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"<br/><br/>\A\B::foo();  // 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法<br/>              // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"<br/>?></code>
Copier après la connexion

Articles connexes recommandés :

Règles de dénomination des variables php et utilisation des variables php (avec code)

Comment php Utilisez l'hexadécimal pour réaliser le cryptage et le déchiffrement de l'ID (avec code)

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!