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默认为空的情况下并不能直接载入目录下的文件,原因如上。(?)

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Fehler beheben: Die angegebene Namespace-Klasse wurde nicht gefunden. Bei der Entwicklung mit PHP treten häufig verschiedene Fehlermeldungen auf. Einer der häufigsten Fehler ist „Die angegebene Namespace-Klasse wurde nicht gefunden“. Dieser Fehler wird normalerweise dadurch verursacht, dass auf die importierte Klassendatei nicht ordnungsgemäß auf den Namespace verwiesen wird. In diesem Artikel wird erläutert, wie Sie dieses Problem lösen können, und es werden einige Codebeispiele bereitgestellt. Schauen wir uns zunächst ein Beispiel für eine häufige Fehlermeldung an: Fatalerror:UncaughtError:C

Redis ist eine Open-Source-Hochleistungs-Schlüsselwertspeicherdatenbank. Wenn wir Redis zur Datenspeicherung verwenden, müssen wir das Design des Schlüsselnamensraums und des Ablaufmechanismus berücksichtigen, um die Leistung und Datenintegrität von Redis aufrechtzuerhalten. In diesem Artikel werden die Designideen und Implementierungsmethoden des Redis-Namespace und des Ablaufmechanismus vorgestellt. 1. Designideen für Redis-Namespaces In Redis können Schlüssel beliebig festgelegt werden. Um die Verwaltung und Unterscheidung verschiedener Datentypen zu erleichtern, führt Redis das Konzept des Namespace ein. Leben

Das F3-Framework ist ein einfaches, benutzerfreundliches, flexibles und skalierbares PHPWeb-Framework. Sein Namespace-Mechanismus bietet uns eine standardisiertere, besser lesbare und klarere Codestruktur. In diesem Artikel untersuchen wir, wie Namespaces im F3-Framework verwendet werden. 1. Was ist ein Namespace? Namespaces werden häufig verwendet, um das Problem von Namenskonflikten in PHP zu lösen. Er kann eine oder mehrere Klassen, Funktionen oder Konstanten in einem Namespace kapseln, was dem Hinzufügen eines Präfixes entspricht. Beispiel

C++ ist eine weit verbreitete Programmiersprache auf hoher Ebene. Sie verfügt über eine hohe Flexibilität und Skalierbarkeit, erfordert jedoch auch, dass Entwickler ihre grammatikalischen Regeln strikt beherrschen, um Fehler zu vermeiden. Einer der häufigsten Fehler ist die „Verwendung eines undefinierten Namespace“. In diesem Artikel wird erläutert, was dieser Fehler bedeutet, warum er auftritt und wie er behoben werden kann. 1. Wozu dient ein undefinierter Namespace? In C++ sind Namespaces eine Möglichkeit, wiederverwendbaren Code zu organisieren, um ihn modular und lesbar zu halten. Sie können Namespaces verwenden, um Funktionen mit demselben Namen zu erstellen

Beispiel für neue Funktionen in PHP8: Wie kann man Namespaces und Codes verwenden, um die Codestruktur besser zu organisieren? Einführung: PHP8 ist eine wichtige Version der Programmiersprache PHP, die viele aufregende neue Funktionen und Verbesserungen einführt. Eine der wichtigsten Neuerungen sind Namespaces. Namespaces sind eine Möglichkeit, Ihren Code in einer besseren Struktur zu organisieren, die Konflikte zwischen Klassen, Funktionen und Konstanten mit demselben Namen vermeidet. In diesem Artikel schauen wir uns an, wie Sie Namespaces und Codes nutzen können, um Ihren PHP8-Code besser zu strukturieren

So beheben Sie PHP-Namespace-Fehler und generieren entsprechende Fehlermeldungen. PHP ist eine weit verbreitete serverseitige Skriptsprache, die zur Entwicklung von Webanwendungen verwendet wird. In PHP ist Namespace (Namespace) ein Mechanismus zum Verwalten und Organisieren von Code, der Namenskonflikte vermeiden und die Lesbarkeit und Wartbarkeit des Codes verbessern kann. Allerdings führt die Komplexität der Namespace-Definition und -Nutzung manchmal zu Fehlern. In diesem Artikel werden einige Methoden zum Beheben von PHP-Namespace-Fehlern und zum Generieren entsprechender Fehlermeldungen vorgestellt. 1. Namensraum

Namespaces: Modularitätsparadies Bei der Softwareentwicklung ist Wartbarkeit ein entscheidender Faktor. Da Ihre Codebasis weiter wächst, ist die Organisation und Kapselung Ihres Codes für die Bewältigung der Komplexität von entscheidender Bedeutung. Zu diesem Zweck sind Namespaces in PHP konzipiert. Konzept des Namespace Ein Namespace ist eine Sammlung logisch zusammengehöriger Bezeichner. Es bietet einen Mechanismus zum Organisieren von Klassen, Funktionen und Konstanten in bestimmten Domänen. Namespaces beseitigen Namenskonflikte, indem sie jeder Entität einen eindeutigen Namen geben und verhindern, dass verschiedene Klassen oder Funktionen denselben Namen haben. Die Syntax des Namespace ist in PHP. Der Namespace wird mit Backslash () definiert: namespaceMyProjectDatabase; der obige Code erstellt eine Datei mit dem Namen „MyProject

Neue Funktionen in PHP 5.4: So verwenden Sie Namespace-Aliase, um Klassennamenaufrufe zu vereinfachen. Die in PHP 5.3 eingeführte Namespace-Funktion bietet uns eine bessere Möglichkeit, Code zu organisieren und zu verwalten. Durch die Organisation verwandter Klassen, Funktionen und Konstanten in Namespaces können Namenskonflikte zwischen verschiedenen Modulen effektiv vermieden werden. In der PHP5.4-Version wurde die Funktion des Namespace-Alias (Namespacealias) eingeführt, die unseren Aufruf weiter erleichtert
