php5.3 之後引入了命名空間的特性,從本質上講,命名空間就是乙個容器,你可以將類、函式和變數放在其中,在命名空間中,你可以無條件地訪問這些項,在命名空間之外,必須匯入或引用命名空間,才能訪問它所包含的項。
namespacemy;require_one
'outputter3.php';
class
outputter
}namespace
useful;
class
outputter
namespace 關鍵字用於建立命名空間,而且一般宣告命名空間時,namespace 必須發到檔案中的第一句,php還支援宣告巢狀的命名空間,如
namespace com\getinstance\util;
在本命名空間內部可以直接呼叫命名空間中的類或函式、變數,
因為我已經位於命名空間中了,所以不必在類名前加任何種類的路徑,
如果打算從命名空間環境之外訪問類,可以使用:
com\getinstance\util\debug::helloworld();
以下**將會報錯:
namespacemain;
com\getinstance\util\debug::helloworld();
因為使用的相對命名空間,php會在 main 命名空間中尋找 com\getinstance\util,但沒有找到,就像建立絕對 url 和檔案路徑時,以分隔符作為開始一樣,你也可以使用這種方式建立絕對命名空間,如下:
namespacemain;
\com\getinstance\util\debug::helloworld();
前導的反斜槓告訴 php 從根命名空間而不是從當前命名空間開始搜尋。
namespacemain;
use com\getinstance\util;
util\debug::helloworld();
匯入 com\getinstance\util,並隱式地為其使用了別名 util。
如果不想引入命名空間,可以匯入 debug 類本身:
namespacemain;
use com\getinstance\util\debug;
util\debug::helloworld();
關鍵字 use 之後使用 as,可以將別名 debug 修改為 udebug
namespacemain;
use com\getinstance\util\debug
asudebug;
udebug::helloworld();
在命名空間中訪問全域性空間(非命名空間),可以在該全域性類前加反斜槓:
namespacecom\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...