ThinkPHP3.0完全开发手册                                           

 

4.2.3              类库导入

ThinkPHP类库的导入区别于其他的框架并没有采用require或者require_once进行导入,所有类库导入都采用统一的机制,包含下面两种方式:

一、Import显式导入

ThinkPHP模拟了Java的类库导入机制,统一采用import方法进行类文件的加载。import方法是ThinkPHP内建的类库导入方法,提供了方便和灵活的文件导入机制,完全可以替代PHPrequireinclude方法。例如:

import("Think.Util.Session");

import("App.Model.UserModel");

import方法具有缓存和检测机制,相同的文件不会重复导入,如果导入了不同的位置下面的同名类库文件,系统也不会再次导入,例如:

import("Think.Util.Array");

import("ORG.Util.Array");

上面的情况导入会产生引入两个同名的Array.class.php 类,所以系统不会再次导入ORG.Util.Array类。

注意:在Unix或者Linux主机下面是区别大小写的,所以在使用import方法的时候要注意目录名和类库名称的大小写,否则会导入失败。

对于import方法,系统会自动识别导入类库文件的位置,ThinkPHP的约定是ThinkORGCom包的导入作为基类库导入,否则就认为是项目应用类库导入。

import("Think.Util.Session");

import("ORG.Util.Page");

上面两个方法分别导入了Think基类库的Util/Session.class.php文件和ORG扩展类库包的Util/Page.class.php文件。

要导入项目的应用类库文件也很简单,使用下面的方式就可以了,和导入基类库的方式看起来差不多:

import("MyApp.Action.UserAction");

import("MyApp.Model.InfoModel");

上面的方式分别表示导入MyApp项目下面的Lib/Action/UserAction.class.phpLib/Model/InfoModel.class.php类文件。通常我们都是在当前项目里面导入所需的类库文件,所以,我们可以使用下面的方式来简化代码

import("@.Action.UserAction");

import("@.Model.InfoModel");

除了看起来简单一些外,还可以方便项目类库的移植。

如果要在当前项目下面导入其他项目的类库,必须保证两个项目的目录是平级的,否则无法使用

import("OtherApp.Model.GroupModel");

的方式来加载其他项目的类库。

我们知道,按照系统的规则,import方法是无法导入具有点号的类库文件的,因为点号会直接转化成斜线,例如我们定义了一个名称为User.Info.class.php 的文件的话,采用:

import("ORG.User.Info");

方式加载的话就会出现错误,导致加载的文件不是ORG/User.Info.class.php 文件,而是ORG/User/Info.class.php 文件,这种情况下,我们可以使用:

import("ORG.User#Info");

来导入。

对于import方法,系统会自动识别导入类库文件的位置,如果是其它情况的导入,需要指定import方法的第二个参数。例如,要导入当前文件所在目录下面的

RBAC/AccessDecisionManager.class.php 文件,可以使用:

import("RBAC.AccessDecisionManager",dirname(__FILE__));

如果你要导入的类库文件名的后缀不是class.php而是php,那么可以使用import方法的第三个参数指定后缀:

import("RBAC.AccessDecisionManager",dirname(__FILE__),".php");

我们建议您使用ThinkPHP开发过程保持类库名称采用class.php的后缀规范。

 

二、别名导入

除了命名空间的导入方式外,import方法还可以支持别名导入,要使用别名导入,首先要定义别名,我们可以在项目配置目录下面增加alias.php 用以定义项目中需要用到的类库别名,例如:

return array(

'rbac'         =>LIB_PATH.'Common/Rbac.class.php',

'page'        =>LIB_PATH.'Common/Page.class.php',

);

那么,现在就可以直接使用:

import("rbac");

import("page");

导入RbacPage类,别名导入方式禁止使用import方法的第二和第三个参数,别名导入方式的效率比命名空间导入方式要高效,缺点是需要预先定义相关别名。

可以为某些需要的类库定义别名,那么无需定义自动加载路径也可以快速的自动加载。

 


站长教学网 免责声明