
## 命名空間
`ZrWebPH`采用命名空間方式定義和自動加載類庫文件,有效的解決了多模塊之間的命名空間沖突問題,并且實現了更加高效的類庫自動加載機制。
> 如果不清楚命名空間的基本概念,可以參考PHP手冊:[PHP命名空間](http://www.php.net/manual/zh/language.namespaces.php)
> 特別注意的是,如果你需要調用PHP內置的類庫,或者第三方沒有使用命名空間的類庫,記得在實例化類庫的時候加上`\`,例如:
>
> ~~~
> // 錯誤的用法
> $class = new stdClass();
> $xml = new SimpleXmlElement($xmlstr);
> // 正確的用法
> $class = new \stdClass();
> $xml = new \SimpleXmlElement($xmlstr);
>
> ~~~
在`ZrWebPHP`中,只需要給類庫正確定義所在的命名空間,并且命名空間的路徑與類庫文件的目錄一致,那么就可以實現類的自動加載,從而實現真正的惰性加載。
例如,`\zrweb\log\Log`類的定義為:
~~~
namespace zrweb\log;
class Log
{
}
~~~
如果我們實例化該類的話,應該是:
~~~
$class = new \zrweb\log\Log();
~~~
系統會自動加載該類對應路徑的類文件,其所在的路徑是?`zrwebphp/lib/zrweb/log/Log.php`。
原則上,可以支持駝峰法命名的目錄,只要命名空間定義和目錄一致即可,例如:
我們實例化
~~~
$class = new \ZrWeb\Log\Log();
~~~
系統則會自動加載`zrwebphp/lib/zrweb/log/Log.php`文件。
## 根命名空間(類庫包)
根命名空間是一個關鍵的概念,以上面的`\zrweb\log\Log`類為例,`zrweb`就是一個根命名空間,其對應的初始命名空間目錄就是系統的類庫目錄(`zrwebphp/lib/zrweb`),我們可以簡單的理解一個根命名空間對應了一個類庫包。
系統內置的幾個根命名空間(類庫包)如下:
| 名稱 | 描述 | 類庫目錄 |
| --- | --- | --- |
| zrweb | 系統核心類庫 | zrwebphp/lib/zrweb |
| lib | 系統lib類庫 | zrwebphp/lib/類庫 |