thinkphp3.2和thinkphp5第三方类库的加载

3.2的导入类库

在3.2中,基本上无需手动加载类库文件,你可以很方便的完成自动加载。

系统可以通过类的命名空间自动定位到类库文件,例如: 
我们定义了一个类 Org\Util\Auth 类:

namespace Org\Util;
class Auth {
}
保存到 ThinkPHP/Library/Org/Util/Auth.class.php。

接下来,我们就可以直接实例化了。

new \Org\Util\Auth();
在实例化Org\Util\Auth类的时候,系统会自动加载 ThinkPHP/Library/Org/Util/Auth.class.php 文件。

框架的Library目录下面的命名空间都可以自动识别和定位,例如:

├─Library 框架类库目录
│ ├─Think 核心Think类库包目录
│ ├─Org Org类库包目录
│ ├─ ... 更多类库目录
Library目录下面的子目录都是一个根命名空间,也就是说以Think、Org为根命名空间的类都可以自动加载:


手动加载第三方类库
如果要加载第三方类库,包括不符合命名规范和后缀的类库,以及没有使用命名空间或者命名空间和路径不一致的类库,或者你就是想手动加载类库文件,我们都可以通过手动导入的方式加载。

我们可以使用import方法导入任何类库,用法如下:

// 导入Org类库包 Library/Org/Util/Date.class.php类库
import("Org.Util.Date");

对于import方法,系统会自动识别导入类库文件的位置,ThinkPHP可以自动识别的类库包包括Think、Org、Com、Behavior和Vendor包,以及Library目录下面的子目录,如果你在Library目录下面创建了一个Test子目录,并且创建了一个UserTest.class.php类库,那么可以这样导入:

import('Test.UserTest');
其他的就认为是应用类库导入。

注意,如果你的类库没有使用命名空间定义的话,实例化的时候需要加上根命名空间,例如:

import('Test.UserTest');
$test = new \UserTest();//注意前面的/,因为是全局的引用
如果你要导入的类库文件名的后缀不是class.php而是php,那么可以使用import方法的第三个参数指定后缀:

import("RBAC.AccessDecisionManager",dirname(__FILE__),".php");
**************注意:在Unix或者Linux主机下面是区别大小写的,所以在使用import方法的时候要注意目录名和类库名称的大小写,否则会导入失败。***********
如果你的第三方类库都放在Vendor目录下面,并且都以.php为类文件后缀,也没用采用命名空间的话,那么可以使用系统内置的Vendor函数简化导入。例如,我们把 Zend 的 Filter\Dir.php 放到 Vendor 目录下面,这个时候 Dir 文件的路径就是 Vendor\Zend\Filter\Dir.php,我们使用vendor 方法导入只需要使用:

Vendor('Zend.Filter.Dir');
就可以导入Dir类库了。

Vendor方法也可以支持和import方法一样的基础路径和文件名后缀参数,例如:

Vendor('Zend.Filter.Dir',dirname(__FILE__),'.class.php');

thinkphp5的第三方类库导入:

如果你的类库没有使用命名空间,则不支持自动加载,必须使用Loader::import方法先导入文件后才能使用。

Loader::import('first.second.Foo');
$foo = new \Foo();
如果使用了命名空间:

使用first.second.Foo类的时候,直接实例化即可使用,例如:

$foo = new \first\second\Foo();
或者先

use first\second\Foo;
然后

$foo = new Foo();
但是要注意类库的放置位置,建议使用composer安装类库,
直接放入应用根目录下面的extend目录下面,该目录是官方建议的第三方扩展类库目录
--------------------- 
作者:wuhounuanyangzhao 
来源:CSDN 
原文:https://blog.csdn.net/wuhounuanyangzhao/article/details/79466243 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/h330531987/article/details/84560698