什麼是命名空間呢?php
命名空間(英語:Namespace)表示標識符(identifier)的可見範圍。一個標識符可在多個命名空間中定義,它在不一樣命名空間中的含義是互不相干的。這樣,在一個新的命名空間中可定義任何標識符,它們不會與任何已有的標識符發生衝突,由於已有的定義都處於其它命名空間中。框架
簡單說來命名空間是爲了解決不一樣庫在同一個環境下使用時出現的命名衝突。例如我本身有一個函數名叫A,可是系統已經有一個A函數了,那就會出現衝突。ide
PHP從5.3版本開始引入了命名空間,以後許多現有PHP類庫以及框架都開始支持它。那麼PHP的命名空間怎麼用呢?函數
下面是一個定義命名空間的例子ui
<?php //file a.php namespace A; const test = ’Atest’; function test() { return __FUNCTION__; } class Test{ public function __construct(){ return __METHOD__; } } ?>
上面例子中就是一個典型的命名空間定義方法,只有 const
, function
, class
受命名空間的約束。spa
使用命名空間的方式以下:.net
<?php namespace B; use A; const test = ’Btest’; function test() { return __FUNCTION__; } class Test{ public function __construct(){ return __METHOD__; } } include "a.php";//必須包含A命名空間的文件 // 徹底限定 // `B est`從絕對位置查找輸出,若是是全局函數則` est` echo B est; //輸出Btest // 限定名稱 // 這裏已經經過`use A`申明瞭在這個文件能夠經過`A...`使用A命名空間的函數 echo A est; //輸出Atest // 非限定名稱 // 非限定名稱的函數`test`會從當前命名控件查找,即B echo test; //輸出Btest // namespace關鍵字表明當前命名空間 echo namespace/test; ?>
首先要注意的是命名空間只起申明做用,也就是在使用了命名空間的時候依然得把這個命名空間申明的那個文件包含進來。在使用中能夠經過 __NAMESPACE__
來查看當前命名空間。code
更多內容能夠查看 PHP官方文檔xml
每一個文件既要申明命名控件又要手動 include
是很是不智能的事情,因此在本身的PHP系統或者框架中能夠使用自動加載技術,讓系統本身去找文檔
最簡單的方式是利用函數 __autoload
函數,可是這個函數只能在非命名控件下定義,也就是全局狀況下:
function __autoload($class) { $dir = ’./’; set_include_path(get_include_path().PATH_SEPARATOR.$ids_dir); $class = str_replace(’\’, ’/’, $class) . ’.php’; require_once($class); }
若是在已經有了命名空間的類中,能夠使用函數 spl_autoload_register
來註冊一個類中的方法來代替 __autoload