PHP 命名空間和自動載入

2022-03-30 14:12:58 字數 1962 閱讀 1129

php5.3 之後引入了命名空間的特性,從本質上講,命名空間就是乙個容器,你可以將類、函式和變數放在其中,在命名空間中,你可以無條件地訪問這些項,在命名空間之外,必須匯入或引用命名空間,才能訪問它所包含的項。

namespace

my;require_one

'outputter3.php';

class

outputter

}namespace

useful;

class

outputter

namespace 關鍵字用於建立命名空間,而且一般宣告命名空間時,namespace 必須發到檔案中的第一句,php還支援宣告巢狀的命名空間,如 

namespace com\getinstance\util;

在本命名空間內部可以直接呼叫命名空間中的類或函式、變數,

因為我已經位於命名空間中了,所以不必在類名前加任何種類的路徑,

如果打算從命名空間環境之外訪問類,可以使用:

com\getinstance\util\debug::helloworld();

以下**將會報錯:

namespace

main;

com\getinstance\util\debug::helloworld();

因為使用的相對命名空間,php會在 main 命名空間中尋找 com\getinstance\util,但沒有找到,就像建立絕對 url 和檔案路徑時,以分隔符作為開始一樣,你也可以使用這種方式建立絕對命名空間,如下:

namespace

main;

\com\getinstance\util\debug::helloworld();

前導的反斜槓告訴 php 從根命名空間而不是從當前命名空間開始搜尋。

namespace

main;

use com\getinstance\util;

util\debug::helloworld();

匯入 com\getinstance\util,並隱式地為其使用了別名 util。

如果不想引入命名空間,可以匯入 debug 類本身:

namespace

main;

use com\getinstance\util\debug;

util\debug::helloworld();

關鍵字 use 之後使用 as,可以將別名 debug 修改為 udebug

namespace

main;

use com\getinstance\util\debug

asudebug;

udebug::helloworld();

在命名空間中訪問全域性空間(非命名空間),可以在該全域性類前加反斜槓:

namespace

com\getinstance\util;

require

"global.php";

\lister::helloworld();

//訪問全域性空間

lister::helloworld(); //

訪問本地命名空間

使用 __namespace__ 常量可以輸出當前的命名空間,在除錯時有用。

php5 引入了 __autoload() 方法來自動包含類檔案,當 php 引擎遇到試圖例項化未知類的操作時,會呼叫 __autoload() 方法(如果已經定義),並將類名當作字串引數傳遞給它,編寫 __autoload() 時,應該定義一種策略來定位和包含缺失的類檔案。如下:

function __autoload($classname) 

$product = new shopproduct();

php 命名空間和自動載入

命名空間 namespace class function get class model class get 使用命名空間的get 函式use class model 使用命名空間的model類當某個類被例項化使用時,autoload函式會自動載入該類,並用引數接收類的命名空間和類名 functi...

PHP自動載入autoload和命名空間的應用小結

先給大家說下什麼是命名空間。什麼是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,對於目錄中的檔案來說,它就扮演了命名空間的角色。具體舉個例子,檔案 foo.txt 可以同時在目錄 home greg 和 home o...

php命名空間namespace自動載入

php的命名空間僅僅提供了乙個邏輯上的類的隔離空間,我們在引用類時,仍要自己實現自動載入。思路就是使用乙個未引入的類時,php自動觸發spl autoload register這個方法,然後就會根據命名空間的結構解析為檔案路徑,引入相關的類檔案啦。下面僅僅編寫乙個簡單的自動載入方法。1 優先使用cl...