命名空間的定義必須在php文件的第一行,之前不能有任何輸出,多個文件中可定義同一個命名空間,但在同一個命名空間中不能有相同的類或函數
定義命名空間:namespace n1\n2;
通常來說,命名空間的名字根據文件所在的路徑來取,但這並不是必須的,根據路徑來取名字是一種好的規範
在使用某個命名空間裏的類,函數時,首先要包含這個命名空間所在的文件,然後根據規則使用之,例如:
a.php:
namespace a;
class Test(){}
----------------------------------------
b.php:
namespace b;
include 'a.php';
$obj = new \a\Test();
//使用use,use只對類名有效
$obj = new Test();//如果這樣用需要在前面加上一句use \a\Test;
$obj = new T();//如果這樣用需要在前面加上一句use \a\Test as T;
//另外
foo();//表示\b\foo()\foo();//表示全局函數foo()
a\foo();//表示\b\a\foo()
\a\foo();//表示\a\foo()
自動加載與命名空間:
函數spl_autoload_register用於註冊自動加載函數,當PHP解析到不存在的類時會自動調用加載函數,將類名及命名空間傳進去
加載函數是自己定義的,我們可以在加載函數中自定義加載規則,一般都是根據傳進來的命名空間來包含相應目錄下的類文件,這樣就不用手動使用
require或者include去手動包含文件了,在框架裏都是這麼做的