ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
![](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/类库 |