PHP命名空间和自动加载初探,php命名空间初探_PHP教程
PHP命名空间和自动加载初探,php命名空间初探
参考资料: PHP手册-语言参考:http://php.net/manual/zh/language.namespaces.php 概要: 1. 声明了命名空间之后,下面的const, function, class都会划归到该命名空间。 2. 只有声明过命名空间的PHP 文件才能加载有命名空间的PHP文件。 3. PHP 5.3 及以上才能使用命名空间 名词: 关键字:namespace 用来声明 本PHP文件的命名空间 常量:__NAMESPACE__ 用来返回当前命名空间的名称 默认为空字符串操作符: use 默认以最后一个\后的字符串为别名,配合 as 则为 as后的字符串,与MySQL的字段别名一致。 实际操作如下: 在apache目录下建立如下文件:index.php,Order.php,User.php

<span> 1</span> <?<span>php </span><span> 2</span> <span>/*</span><span>* </span><span> 3</span> <span> * @Author: Martin </span><span> 4</span> <span> * @Support: Martin </span><span> 5</span> <span> * @Last Modified by: Martin </span><span> 6</span> <span>*/</span> <span> 7</span> <span>namespace Order; </span><span> 8</span> <span> 9</span> <span>const</span> STR = 'order list<br />'<span>; </span><span>10</span> <span>11</span> <span>function</span><span> detail() </span><span>12</span> <span>{ </span><span>13</span> <span>return</span> 'order detail<br />'<span>; </span><span>14</span> <span>} </span><span>15</span> <span>function</span><span> call_by_self() </span><span>16</span> <span>{ </span><span>17</span> <span>return</span> 'call by self<br />'<span>; </span><span>18</span> <span>} </span><span>19</span> <span>/*</span><span>* </span><span>20</span> <span> * </span><span>21</span> <span>*/</span> <span>22</span> <span>class</span><span> Orderlist </span><span>23</span> <span>{ </span><span>24</span> <span>25</span> <span>public</span> <span>function</span><span> __construct() </span><span>26</span> <span> { </span><span>27</span> <span>echo</span> 'Class NameSpace is "', __NAMESPACE__, '"'<span>; </span><span>28</span> <span> } </span><span>29</span> <span>public</span> <span>function</span><span> show_list() </span><span>30</span> <span> { </span><span>31</span> <span>for</span> (<span>$i</span> = 0; <span>$i</span> < 5; <span>$i</span>++<span>) { </span><span>32</span> <span>echo</span> "<ul><li>this is order<span>$i</span><br />"<span>; </span><span>33</span> <span>//</span><span>内部直接访问</span> <span>34</span> <span>echo</span><span> detail(); </span><span>35</span> <span>echo</span> "</li></ul>"<span>; </span><span>36</span> <span> } </span><span>37</span> <span> } </span><span>38</span> <span>} </span><span>39</span> <span>//</span><span>内部通过命名空间访问</span> <span>40</span> <span>echo</span> \Order\call_by_self();
index.php 内容为:
<span> 1</span> <?<span>php </span><span> 2</span> <span>/*</span><span>* </span><span> 3</span> <span> * @Author: Martin </span><span> 4</span> <span> * @Support: Martin </span><span> 5</span> <span> * @Last Modified by: Martin </span><span> 6</span> <span>*/</span> <span> 7</span> <span>namespace index; </span><span> 8</span> <span>include_once</span>('Order.php'<span>); </span><span> 9</span> <span>10</span> <span>//</span><span>外部访问class 实例化即可使用</span> <span>11</span> <span>use</span><span> Order\Orderlist; </span><span>12</span> <span>$orderlist</span> = <span>new</span><span> orderlist; </span><span>13</span> <span>$orderlist</span>-><span>show_list(); </span><span>14</span> <span>15</span> <span>//</span><span>外部访问静态变量和function 直接访问</span> <span>16</span> <span>use</span><span> Order; </span><span>17</span> <span>echo</span><span> Order\STR; </span><span>18</span> <span>echo</span> Order\detail();
打印结果为:
User.php 内容为:
<span>1</span> <span>namespace User; </span><span>2</span> <span>//</span><span>直接载入Order</span> <span>3</span> <span>#</span><span>include('Order.php'); </span><span>4</span> <span>//自动载入</span> <span>5</span> spl_autoload_register(<span>function</span>(<span>$className</span><span>) { </span><span>6</span> <span>var_dump</span>(<span>$className</span><span>); </span><span>7</span> <span>}); </span><span>8</span> spl_autoload_call('Order');
打印结果为:
SPL自动载入函数包含如下:
spl_autoload_extensions: 注册并返回spl_autoload函数使用的默认文件扩展名。get_include_path: 设置默认引用的文件夹
spl_autoload_register: 自动引入文件
实际操作如下: 我们重新调整目录结构和并复制order 到 lib下面 如下:
修改User.php 如下:
<span> 1</span> <span>namespace User; </span><span> 2</span> <span> 3</span> <span>//</span><span>直接载入Order</span> <span> 4</span> <span>#</span><span>include('Order.php'); </span><span> 5</span> <span>//自动载入</span> <span> 6</span> <span>define</span>('LIB_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'lib' .<span> DIRECTORY_SEPARATOR); </span><span> 7</span> spl_autoload_register(<span>function</span> (<span>$class</span><span>) { </span><span> 8</span> <span>$path</span> = LIB_DIR . <span>$class</span> . '.lib.php'<span>; </span><span> 9</span> <span>include</span> (<span>$path</span><span>); </span><span>10</span> <span>}); </span><span>11</span> <span>12</span> spl_autoload_call('Order'<span>); </span><span>13</span> <span>use</span><span> Order; </span><span>14</span> <span>15</span> <span>$orderList</span> = <span>new</span><span> \Order\Orderlist(); </span><span>16</span> <span>$orderList</span>->show_list();
打印结果为:
注意: 当采用SPL载入文件时,use并不能触发spl_autoload_register函数,他会被new触发,这样就会提示找不到文件, 所有采用spl_autoload_call 来提前触发自动载入。 本文地址:http://www.cnblogs.com/martin-tan/p/4864539.html 问题: 使用get_include_path,spl_autoload_extensions并且spl_autoload_register默认为空的情况下并不能直接载入目录下的文件,原因如上。(?)

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

Résoudre l'erreur PHP : la classe d'espace de noms spécifiée n'a pas été trouvée lors du développement avec PHP, nous rencontrons souvent divers messages d'erreur. L'une des erreurs courantes est "La classe d'espace de noms spécifiée n'a pas été trouvée". Cette erreur est généralement provoquée par le fait que le fichier de classe importé n’est pas correctement référencé dans l’espace de noms. Cet article explique comment résoudre ce problème et fournit quelques exemples de code. Tout d’abord, examinons un exemple de message d’erreur courant : Fatalerror:UncaughtError:C.

Le framework F3 est un framework PHPWeb simple, facile à utiliser, flexible et extensible. Son mécanisme d'espace de noms (Namespace) nous offre une structure de code plus standardisée, plus lisible et plus claire. Dans cet article, nous explorerons comment utiliser les espaces de noms dans le framework F3. 1. Qu'est-ce qu'un espace de noms ? Les espaces de noms sont souvent utilisés pour résoudre le problème des conflits de noms en PHP. Ils peuvent encapsuler une ou plusieurs classes, fonctions ou constantes dans un espace de noms, ce qui équivaut à leur ajouter un préfixe. exemple

Redis est une base de données de stockage clé-valeur open source et hautes performances. Lorsque nous utilisons Redis pour le stockage de données, nous devons prendre en compte la conception de l'espace de noms des clés et du mécanisme d'expiration afin de maintenir les performances et l'intégrité des données de Redis. Cet article présentera les idées de conception et les méthodes d'implémentation de l'espace de noms et du mécanisme d'expiration de Redis. 1. Idées de conception d'espace de noms Redis Dans Redis, les clés peuvent être définies arbitrairement. Afin de faciliter la gestion et la distinction des différents types de données, Redis introduit le concept d'espace de noms. vie

Le C++ est un langage de programmation de haut niveau largement utilisé. Il présente une grande flexibilité et évolutivité, mais il oblige également les développeurs à maîtriser strictement ses règles grammaticales pour éviter les erreurs. L'une des erreurs courantes est "l'utilisation d'un espace de noms non défini". Cet article explique ce que signifie cette erreur, pourquoi elle se produit et comment la corriger. 1. À quoi sert un espace de noms non défini ? En C++, les espaces de noms sont un moyen d'organiser du code réutilisable afin de le garder modulaire et lisible. Les fonctions portant le même nom peuvent être créées à l'aide d'espaces de noms

Exemple de nouveautés en PHP8 : Comment utiliser les espaces de noms et les codes pour mieux organiser la structure du code ? Introduction : PHP8 est une version importante du langage de programmation PHP, qui introduit de nombreuses nouvelles fonctionnalités et améliorations intéressantes. L’une des nouvelles fonctionnalités les plus importantes concerne les espaces de noms. Les espaces de noms sont un moyen d'organiser votre code dans une meilleure structure qui évite les conflits entre les classes, les fonctions et les constantes portant le même nom. Dans cet article, nous verrons comment exploiter les espaces de noms et les codes pour mieux structurer votre code PHP8.

Comment résoudre les erreurs d'espace de noms PHP et générer les messages d'erreur correspondants. PHP est un langage de script côté serveur largement utilisé pour développer des applications Web. En PHP, l'espace de noms est un mécanisme de gestion et d'organisation du code, qui peut éviter les conflits de noms et améliorer la lisibilité et la maintenabilité du code. Cependant, en raison de la complexité de la définition et de l'utilisation des espaces de noms, des erreurs se produisent parfois. Cet article présentera quelques méthodes pour résoudre les erreurs d'espace de noms PHP et générer les invites d'erreur correspondantes. 1. Espace de nom

Espaces de noms : le paradis de la modularité Dans le développement de logiciels, la maintenabilité est un facteur crucial. À mesure que votre base de code continue de croître, l'organisation et l'encapsulation de votre code sont essentielles à la gestion de la complexité. Les espaces de noms en PHP sont conçus à cet effet. Concept d'espace de noms Un espace de noms est une collection d'identifiants logiquement liés. Il fournit un mécanisme pour organiser les classes, les fonctions et les constantes dans des domaines spécifiques. Les espaces de noms éliminent les conflits de noms en attribuant à chaque entité un nom unique, empêchant ainsi différentes classes ou fonctions d'avoir le même nom. La syntaxe de l'espace de noms est en PHP. L'espace de noms est défini à l'aide d'une barre oblique inverse () : namespaceMyProjectDatabase ;

Nouvelles fonctionnalités de PHP 5.4 : Comment utiliser les alias d'espace de noms pour simplifier les appels de noms de classe. La fonction d'espace de noms introduite dans PHP 5.3 nous offre une meilleure façon d'organiser et de gérer le code. En organisant les classes, fonctions et constantes associées dans des espaces de noms, les conflits de noms entre différents modules peuvent être efficacement évités. Dans la version PHP5.4, la fonction d'alias d'espace de noms (namespacealias) a été introduite, ce qui facilite encore plus nos appels et
