![](https://img.kancloud.cn/89/7a/897a2086ee7cd90836e999e2c5b8de50_968x414.jpeg)
## 命名空间
`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/类库 |