Table des matières
How to Use PHP Namespaces, Part 2: Importing, Aliases, and Name Resolution
Maison php教程 php手册 How to Use PHP Namespaces, Part 1: The Basics

How to Use PHP Namespaces, Part 1: The Basics

Jun 06, 2016 pm 07:52 PM
php th use

在另一个PHP文件中包含此文件。 myapp.php 1 2 3 4 5 6 7 ?php header( 'Content-type: text/plain' ); require_once ( 'lib1.php' ); echo \App\Lib1\MYCONST . "\n" ; echo \App\Lib1\MyFunction() . "\n" ; echo \App\Lib1\MyClass::WhoAmI() . "\n" ; ?

在另一个PHP文件中包含此文件。

  myapp.php

1

2

3

4

5

6

7

<?php

header('Content-type: text/plain');

require_once('lib1.php');

echo \App\Lib1\MYCONST . "\n";

echo \App\Lib1\MyFunction() . "\n";

echo \App\Lib1\MyClass::WhoAmI() . "\n";

?>

因在myapp.php中未定义任何命名空间,所以全部代码都位于全局空间内。任何对MYCONST、MyFunction 或者MyClass 的直接引用都会失败,因为他们位于App\Lib1命名空间内。当想调用lib1.php中的代码,必须加上”\App\Lib1″前缀形成完全限定名(fully-qualified names)。myapp.php的运行结果为:

App\Lib1\MYCONST
App\Lib1\MyFunction
App\Lib1\MyClass::WhoAmI

完全限定名也会很长,而且相对于诸如 App-Lib1-MyClass这样的长类名并无明显好处。因此,在下篇文章中将会讨论命名空间别名,同时对PHP如何处理命名空间做近距离观察。

 

How to Use PHP Namespaces, Part 2: Importing, Aliases, and Name Resolution

 

在下面的示例中,定义了两段几乎完全相同的代码,唯一的不同之处就在于它们的命名空间。

lib1.php

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

// application library 1

namespace App\Lib1;

const MYCONST = 'App\Lib1\MYCONST';

function MyFunction() {

    return __FUNCTION__;

}

class MyClass {

    static function WhoAmI() {

        return __METHOD__;

    }

}

?>

lib2.php

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

// application library 2

namespace App\Lib2;

const MYCONST = 'App\Lib2\MYCONST';

function MyFunction() {

    return __FUNCTION__;

}

class MyClass {

    static function WhoAmI() {

        return __METHOD__;

    }

}

?>

先来了解一些PHP术语:
完全限定名
任何PHP代码都具有完全限定名——一个以反斜线起始的标识符。例如:\App\Lib1\MYCONST, \App\Lib2\MyFunction()。
完全限定名不会产生任何歧义。首个反斜线与文件系统路径类似,都指明了“根”全局空间。如果在全局空间内实现了一个MyFunction()函数,可在lib1.php和lib2.php中使用“\MyFunction()”对其进行调用。
完全限定名对一次性函数调用或对象初始化有帮助。然而,它们不适用于大量调用的情况。就像接下来要看到的,PHP为命名空间输入提供了其他一些选择。
部分限定名
至少有一个命名空间分隔符的标识符。例如:Lib1\MyFunction().
未限定名
没有命名空间分隔符的标识符。例如:MyFunction().

在同一命名空间内工作
考虑以下代码:
myapp1.php

1

2

3

4

5

6

7

8

9

<?php

namespace App\Lib1;

require_once('lib1.php');

require_once('lib2.php');

header('Content-type: text/plain');

echo MYCONST . "\n";

echo MyFunction() . "\n";

echo MyClass::WhoAmI() . "\n";

?>

虽然同时包含了lib1.php和lib2.php,但MYCONST, MyFunction, and MyClass只会引用lib1.php中的代码。因为myapp1.php的代码同样位于App\lib1命名空间内。
result: 
App\Lib1\MYCONST
App\Lib1\MyFunction
App\Lib1\MyClass::WhoAmI

<strong>命名空间导入</strong>
命名空间可通过use操作符导入。例如
myapp2.php
Copier après la connexion

1

2

3

4

5

6

7

8

9

<?php

use App\Lib2;

require_once('lib1.php');

require_once('lib2.php');

header('Content-type: text/plain');

echo Lib2\MYCONST . "\n";

echo Lib2\MyFunction() . "\n";

echo Lib2\MyClass::WhoAmI() . "\n";

?>

 

可使用任意数量的use语句或使用逗号分隔每个独立的命名空间。在此例中,导入了“App\Lib2”命名空间。但此刻仍然无法直接引用MYCONST, MyFunction 或 MyClass,因为调用他们的代码位于全局空间内,PHP将会在全局空间内查找它们。然而,如果我们加入“Lib2\”前缀,它们便形成部分限定名,PHP将会在已导入的命名空间内搜索直到找到匹配项。

result

App\Lib2\MYCONST
App\Lib2\MyFunction
App\Lib2\MyClass::WhoAmI
Copier après la connexion

命名空间别名

命名空间别名或许是最有帮助的功能。别名可使较短的名称来代替较长名称。

myapp3.php

1

2

3

4

5

6

7

8

9

10

11

<?php

use App\Lib1 as L;

use App\Lib2\MyClass as Obj;

header('Content-type: text/plain');

require_once('lib1.php');

require_once('lib2.php');

echo L\MYCONST . "\n";

echo L\MyFunction() . "\n";

echo L\MyClass::WhoAmI() . "\n";

echo Obj::WhoAmI() . "\n";

?>

第一个use语句设定"App/Lib1"的别名为“L”,任何使用"L"的部分限定名都会在编译阶段被解释为“App/Lib1”。因此可使用 L\MYCONST 和 L\MyFunction来代替完全限定名。

第二个use语句非常有趣。它将'Obj'设定为App\Lib2命名空间内的类MyClass的别名。这种别名设定方式只对类有效,常量与函数不适用。

设定类别名后,就可以用new Obj()来创建实例或直接调用静态方法了。

App\Lib1\MYCONST
App\Lib1\MyFunction
App\Lib1\MyClass::WhoAmI
App\Lib2\MyClass::WhoAmI
Copier après la connexion

PHP命名解析规则
PHP标识符命名解析遵循以下规则:
1. 在编译阶段解析拥有完全限定名的常量、类或函数的调用。
2. 未限定和部分限定名根据命名空间导入规则进行解释。例如,如果命名空间A\B\C被导入且设定别名为C,那么C\D\e()调用将被解释为A\B\C\D\e()
3. 在命名空间内,所有未根据命名空间导入规则进行解释的部分限定名都会拥有当前命名空间的前缀。例如:如果在命名空间A\B内执行C\D\e()调用,它将会被解释为 A\B\C\D\e()。

4. 未限定的类名会根据当前导入的命名空间进行解释,同时会使用全名来代替缩写后的名称。例如:如果在命名空间A\B内的类C被导入为X,new X()将被解释为 new A\B\C()。<br> 5. 命名空间内的未限定函数调用会在运行时解析。例如:如果MyFunction()在命名空间A\B内被调用,PHP首先会搜索函数\A\B\MyFunction(),如果未找到匹配项,PHP会在全局空间内搜索\MyFunction()函数。<br> 6. 调用未限定或部分限定名的类会在运行时解析。例如:如果在命名空间A\B内调用new C(),PHP会搜索类A\B\C,如果未能找到匹配项,PHP将会试图自动载入类A\B\C。

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

See all articles