tp5 命名空间
命名空间
ThinkPHP5采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲突问题,并且实现了更加高效的类库自动加载机制。
特别注意的是,如果你需要调用PHP内置的类库,或者第三方没有使用命名空间的类库,记得在实例化类库的时候加上\,例如:
// 错误的用法 $class = new stdClass(); $xml = new SimpleXmlElement($xmlstr); // 正确的用法 $class = new \stdClass(); $xml = new \SimpleXmlElement($xmlstr);
在ThinkPHP5.0中,只需要给类库正确定义所在的命名空间,并且命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载,从而实现真正的惰性加载。
例如,\think\cache\driver\File类的定义为:
namespace think\cache\driver; class File { }
如果我们实例化该类的话,应该是:
$class = new \think\cache\driver\File();
系统会自动加载该类对应路径的类文件,其所在的路径是thinkphp/library/think/cache/driver/File.php。
5.0默认的目录规范是小写,类文件命名是驼峰法,并且首字母大写。
原则上,可以支持驼峰法命名的目录,只要命名空间定义和目录一致即可,例如:
我们实例化
$class=new\Think\Cache\Driver\File();
系统则会自动加载thinkphp/library/Think/Cache/Driver/File.php文件。
自动注册
我们只需要把自己的类库包目录放入EXTEND_PATH目录(默认为extend,可配置),就可以自动注册对应的命名空间,例如:
我们在extend目录下面新增一个my目录,然后定义一个\my\Test类(类文件位于extend/my/Test.php)如下:
namespace my; class Test { public function sayHello() { echo 'hello'; } }
我们就可以直接实例化和调用:
$Test = new \my\Test(); $Test->sayHello();
相关推荐
孙雪峰 2020-06-13
xuelang0 2020-04-21
austindev 2020-04-29
Triones 2019-10-30
xuelang0 2019-09-04
Phplayers 2019-08-14
klarclm 2019-07-17
微麦PHP 2019-09-05
mathchao 2019-04-30
moringblog 2019-03-22
xishizhaohua 2019-06-27
一个过客 2019-06-18
xianzhe 2019-06-21
azhedashuaibi 2019-06-21
xianzhe 2019-06-21
ahxxx 2019-06-20
csdnphpandroid 2019-05-10
shangmeimei 2018-04-01
bestlzk 2010-07-05