首先先讲自动加载:
前提:你的第三方类库要满足(1)符合命名规范和后缀的类库(2)使用命名空间,命名空间和路径一致的类库
(1)在ThinkPHP
目录下的library目录下的每一个子目录都是一个根命名空间
(2)凡是以这些子目录为根命名空间的类都可以自动加载
例如:Org/某某.class.php Think/某某.class.php 我们在项目中使用的时候
(a)直接 new \Org\某某.class.php既可以获得对象,或者
(b)use Org\某某; 实例化的时候直接new 某某();即可
如果你不想在Library下面创建,你想单独建一个文件夹存放第三方引入的类,你也可以自己注册一个根命名空间
在配置文件中配置: AUTOLOAD_NAMESPACE=>array(
'新的根命名空间名称'=>THINK_PATH.'新文件夹名称'
)
THINK_PATH就是你的ThinkPhp文件夹
这时候你可以把第三方类库放入刚刚新建的文件夹中,譬如:ThinkPhp/MyNamespace/Ceshi.class.php
对应的配置文件这样写:AUTOLOAD_NAMESPACE=>array( 'MyNamespace'=>THINK_PATH.'MyNamespace')
(1)记住:你的第三方类的命名空间要写上:namespace MyNamespace; 使用的时候new /MyNamespace/某某.class.php
(2)如果你觉得麻烦,不想在第三方类库里写命名空间可以这样:AUTOLOAD_NAMESPACE=>array( '某某'=>THINK_PATH.'MyNamespace/某某.class.php')直接指向第三方类
而不是文件夹,使用的时候:new \某某();即可
然而,注册的命名空间过多,自动加载效率会有所下降,这时候仅引入了类库映射的概念
在项目中这样写: \Think\Think::addMap('My',THINK_PATH.'MyNamespace\My.class.php');
$model=new \My();
$model->ceshi();
到此 可以总结一下自动加载的优先级: * 自动加载的优先级:(1)判断是否有注册类库映射,如果有自动加载类库映射定义的文件
* (2)判断Library目录下是否有该目录或文件,有则自动加载
* (3)判断是否有注册根命名空间
* (4)以上都没有在模块下找
手动加载就直接截图了:
你也可以参考手册:http://document.thinkphp.cn/manual_3_2.html#autoload