自动加载
Library目录下面的子目录都是一个根命名空间,也就是说以Think、Org为根命名空间的类都可以自动加载:
new Think\Cache\Driver\File();new Org\Util\Auth();new Org\Io\File();
都可以自动加载对应的类库文件。
你可以在Library目录下面任意增加新的目录,就会自动注册成为一个新的根命名空间。
注册新的命名空间
除了Library目录下面的命名空间之外,我们还可以注册其他的根命名空间,例如:
'AUTOLOAD_NAMESPACE' => array( 'My' => THINK_PATH.'My', 'One' => THINK_PATH.'One',)
配置了上面的AUTOLOAD_NAMESPACE
后,如果我们实例化下面的类库
new My\Net\IpLocation();new One\Util\Log();
会自动加载对应的类库文件
ThinkPHP/My/Net/IpLocation.class.phpThinkPHP/One/Util/Log.class.php
如果命名空间不在Library目录下面,并且没有定义对应的AUTOLOAD_NAMESPACE
参数的话,则会当作模块的命名空间进行自动加载,例如:
new Home\Model\UserModel();new Home\Event\UserEvent();
由于ThinkPHP/Library目录下面不存在Home目录,也没在AUTOLOAD_NAMESPACE
参数定义Home命名空间,所以就把Home当成模块命名空间来识别,所以会自动加载:
Application/Home/Model/UserModel.class.phpApplication/Home/Event/UserEvent.class.php
注意:命名空间的大小写需要和目录名的大小写对应,否则可能会自动加载失败
自动加载的优先级
在实际的应用类库加载过程中,往往会涉及到自动加载的优先级问题,以
Test\MyClass
类为例,自动加载的优先顺序如下:
判断是否有注册了Test\MyClass类库映射,如果有则自动加载类库映射定义的文件;
判断是否存在Library/Test目录,有则以该目录为初始目录加载;
判断是否有注册Test根命名空间,有则以注册的目录为初始目录加载;
如果以上都不成立,则以Test为模块目录进行初始目录加载;
以上面获取到的初始目录加载命名空间对应路径的文件
手动加载第三方类库
如果要加载第三方类库,包括不符合命名规范和后缀的类库,以及没有使用命名空间或者命名空间和路径不一致的类库,或者你就是想手动加载类库文件,我们都可以通过手动导入的方式加载。
我们可以使用import方法导入任何类库,用法如下:
赞 (0)