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

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP エラーの解決: 指定された名前空間クラスが見つかりません PHP を使用して開発を行っていると、さまざまなエラー メッセージに遭遇することがよくあります。よくあるエラーの 1 つは、「指定された名前空間クラスが見つかりませんでした」です。このエラーは通常、インポートされたクラス ファイルがネームスペースを適切に参照していないことが原因で発生します。この記事では、この問題を解決する方法を説明し、いくつかのコード例を示します。まず、一般的なエラー メッセージの例を見てみましょう: Fatalerror:UncaughtError:C

F3 フレームワークは、シンプルで使いやすく、柔軟でスケーラブルな PHPWeb フレームワークであり、その名前空間 (Namespace) メカニズムにより、より標準化され、読みやすく、明確なコード構造が提供されます。この記事では、F3 フレームワークで名前空間を使用する方法を説明します。 1. ネームスペースとは何ですか? ネームスペースは、PHP での名前の競合の問題を解決するためによく使用されます。ネームスペースでは、1 つ以上のクラス、関数、または定数をネームスペースにカプセル化できます。これは、それらにプレフィックスを追加するのと同じです。例

Redis は、オープンソースの高性能キー/値ストレージ データベースです。データ ストレージに Redis を使用する場合、Redis のパフォーマンスとデータの整合性を維持するために、キーの名前空間と有効期限のメカニズムの設計を考慮する必要があります。この記事では、Redisの名前空間と有効期限の仕組みの設計思想と実装方法を紹介します。 1. Redis 名前空間の設計思想 Redis ではキーを任意に設定できます。さまざまなデータ型の管理と区別を容易にするために、Redis では名前空間の概念が導入されています。人生

C++ は広く使用されている高級プログラミング言語であり、高い柔軟性と拡張性を備えていますが、開発者はエラーを避けるために文法規則を厳密に習得する必要があります。よくあるエラーの 1 つは、「未定義の名前空間の使用」です。この記事では、このエラーの意味、発生理由、および修正方法について説明します。 1. 未定義の名前空間はどのような用途に使用されますか? C++ では、名前空間は再利用可能なコードを編成してモジュール化して読みやすくする方法です。名前空間を使用して同じ名前の関数を作成できます

PHP8 の新機能の例: 名前空間とコードを使用してコード構造をより適切に整理するにはどうすればよいですか?はじめに: PHP8 は PHP プログラミング言語の重要なバージョンであり、多くのエキサイティングな新機能と改善が導入されています。最も重要な新機能の 1 つは名前空間です。ネームスペースは、コードをより適切な構造に編成して、同じ名前のクラス、関数、定数間の競合を回避する方法です。この記事では、名前空間とコードを活用して PHP8 コードをより適切に構造化する方法を見ていきます。

PHP は、幅広い用途に対応できる柔軟性の高いプログラミング言語です。 PHP 開発では、名前の競合を回避し、コードの可読性と保守性を向上させるために、PHP では名前空間の概念が導入されています。名前空間は、開発者が同じプロジェクト内で競合することなく同じクラス名または関数名を使用するのに役立ちます。この記事では、PHP で名前空間を設定する方法と一般的なアプリケーション例を紹介します。 1. PHP 名前空間の設定方法 ファイルの先頭で namespa を使用して、PHP で名前空間を宣言します。

PHP 名前空間エラーを解決し、対応するエラー メッセージを生成する方法 PHP は、Web アプリケーションの開発に広く使用されているサーバー側スクリプト言語です。 PHP では、ネームスペース (Namespace) はコードを管理および編成するためのメカニズムであり、これにより名前の競合を回避し、コードの可読性と保守性を向上させることができます。ただし、名前空間の定義と使用が複雑なため、エラーが発生することがあります。この記事では、PHP 名前空間エラーを解決し、対応するエラー プロンプトを生成するいくつかの方法を紹介します。 1. ネームスペース

PHP5.3 の新機能: 名前空間を使用してクラス名の競合を解決する方法 はじめに: PHP の開発中、プロジェクトがより大きく複雑になるにつれて、クラス名の競合も発生します。この問題を解決するために、PHP5.3 バージョンでは名前空間の概念が導入されました。名前空間は、名前の競合を避けるために、関連するクラス、関数、定数をまとめて整理する方法を提供します。この記事では、PHP 名前空間の概念と、名前空間を使用してクラス名の競合を解決する方法をコード例とともに詳しく紹介します。
