搜尋
首頁php教程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     Order.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();

 

打印结果为:

以上内容包含了:通过命名空间来访问文件和直接实例化访问,以及本空间直接访问。 命名空间的存在是为了防止两个同名的class都被载入,使用命名空间在加载第三方的类时能避免同名冲突。   下面来说一下自动加载   SPL 的全称是:Standard PHP Library PHP标准库,在PHP5以后已经内置在PHP中,无需另外安装。 SPL包含了一套针对数据结构、迭代器、异常、文件处理等的函数库。   自动装载库有以下函数 spl_autoload_call:尝试调用所有已注册的__autoload()函数来装载请求类

 

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

 

 
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
解决PHP报错:未找到指定的命名空间类解决PHP报错:未找到指定的命名空间类Aug 18, 2023 pm 11:28 PM

解决PHP报错:未找到指定的命名空间类在使用PHP进行开发时,我们经常会遇到各种各样的报错信息。其中一种常见的报错就是“未找到指定的命名空间类”。这个错误通常是由于引入的类文件没有被正确地命名空间引用所引起的。本文将介绍如何解决这个问题,并提供一些代码示例。首先,让我们看一下一个常见的报错信息示例:Fatalerror:UncaughtError:C

如何在F3框架中使用命名空间(Namespace)?如何在F3框架中使用命名空间(Namespace)?Jun 03, 2023 am 08:02 AM

F3框架是一款简单易用,灵活可扩展的PHPWeb框架,它的命名空间(Namespace)机制为我们提供了一个更加规范、可读性更强、代码结构更为清晰的编程方式。在这篇文章中,我们将探讨如何在F3框架中使用命名空间。一、什么是命名空间命名空间常被用于解决在PHP中命名冲突的问题,它可以将一个或多个类、函数或常量封装在一个命名空间中,相当于给它们加上一个前缀。例

Redis的命名空间和过期机制的设计思路和实现方式Redis的命名空间和过期机制的设计思路和实现方式May 11, 2023 am 10:40 AM

Redis是一个开源的高性能的键值存储数据库。在使用Redis进行数据存储的时候,我们需要考虑到键的命名空间与过期机制的设计,来维护Redis的性能和数据完整性。本文将介绍Redis的命名空间和过期机制的设计思路和实现方式。一、Redis的命名空间设计思路在Redis中,键是可以任意设置的。为了方便管理和区分不同的数据类型,Redis引入了命名空间的概念。命

C++语法错误:使用了未定义的命名空间,怎么处理?C++语法错误:使用了未定义的命名空间,怎么处理?Aug 21, 2023 pm 09:49 PM

C++是一种广泛使用的高级编程语言,它有很高的灵活性和可扩展性,但同时也需要开发者严格掌握其语法规则才能避免出现错误。其中,常见的错误之一就是“使用了未定义的命名空间”。本文将介绍该错误的含义、出现原因和解决方法。一、什么是使用了未定义的命名空间?在C++中,命名空间是一种组织可重用代码的方式,以便保持代码的模块性和可读性。使用命名空间的方式可以使同名的函数

PHP8新特性示例:如何利用命名空间和代码更好地组织代码结构?PHP8新特性示例:如何利用命名空间和代码更好地组织代码结构?Sep 11, 2023 pm 12:22 PM

PHP8新特性示例:如何利用命名空间和代码更好地组织代码结构?引言:PHP8是PHP编程语言的一个重要版本,它引入了许多令人兴奋的新特性和改进。其中一个最重要的新特性是命名空间(namespace)。命名空间是一种将代码组织成更好结构的方法,它能够避免相同名称的类、函数和常量之间的冲突。在本文中,我们将介绍如何利用命名空间和代码来更好地组织PHP8代码的结构

解决PHP命名空间错误并生成对应报错提示的方法解决PHP命名空间错误并生成对应报错提示的方法Aug 07, 2023 pm 05:16 PM

解决PHP命名空间错误并生成对应报错提示的方法PHP是一种广泛使用的服务器端脚本语言,被用于开发Web应用程序。在PHP中,命名空间(Namespace)是一种管理和组织代码的机制,可以避免命名冲突,提高代码的可读性和可维护性。然而,由于命名空间定义和使用的复杂性,有时会导致错误的产生。本文将介绍一些解决PHP命名空间错误并生成对应报错提示的方法。一、命名空

PHP 5.4版本新功能:如何使用命名空间别名简化类名调用PHP 5.4版本新功能:如何使用命名空间别名简化类名调用Jul 29, 2023 pm 11:45 PM

PHP5.4版本新功能:如何使用命名空间别名简化类名调用在PHP5.3版本中引入的命名空间(namespace)功能为我们提供了一种更好的组织和管理代码的方式。通过将相关的类、函数和常量组织到命名空间中,可以有效避免不同模块之间的命名冲突。而在PHP5.4版本中,命名空间别名(namespacealias)的功能被引入,进一步方便了我们对类名的调用和

命名空间的奥德赛:探索 PHP 的模块化天堂命名空间的奥德赛:探索 PHP 的模块化天堂Mar 10, 2024 am 09:04 AM

命名空间:模块化天堂在软件开发中,可维护性是一个至关重要的因素。随着代码库的不断增长,组织和封装代码对于管理复杂性至关重要。PHP中的命名空间正是为此而生的。命名空间的概念命名空间是逻辑上相关的标识符的集合。它提供了一种将类、函数和常量组织到特定领域的机制。命名空间通过为每个实体提供一个唯一的名称来消除名称冲突,避免不同的类或函数具有相同的名称。命名空间的语法在php中,命名空间使用反斜杠()定义:namespaceMyProjectDatabase;上面的代码创建了一个名为"MyProject

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具