ThinkPHP的所有类库引用采用命名空间的方式,以保证类库的唯一性。在
应用开发的时候不需要使用传统的include 或者require 指令,ThinkPHP的类库导入方式和Java的Import机制类似,只要遵循命名规范,类库的导入和使用就显得方便有效,熟悉.Net的开发人员还可以使用using的别名,内建的导入缓存支持避免重复的
文件导入。新版本还增加了匹配导入和导入冲突的判断功能。
Import方法是ThinkPHP内建的类库和文件导入方法,提供了方便和灵活的文件导入机制。例如:
- Import("Think.util.ListIterator");Import("App.Model.UserModel");
Import方法具有缓存和检测机制,相同的文件不会重复导入,如果发现导入了不同的位置下面的同名类库文件,
系统会提示冲突,例如:
- Import("Think.Util.Array");Import("App.Util.Array");
上面的情况导入会产生引入两个同名的Array.class.php 类,即使实际上的类名可能不存在冲突,但是按照ThinkPHP的规范,类名和文件名是一致的,所以系统会抛出类名冲突的异常,并终止执行。
除了正常的导入操作为,还支持模式匹配导入和多文件导入。例如:
导入Think.Util目录下面的所有类文件
- Import("Think.Util.*");Import("App.Model.*");
注意:使用子目录引入的方式,如果目录下面文件较多会给系统带来较大的目录遍历开销。
对于Import方法,系统会自动识别导入类库文件的位置,ThinkPHP的约定是Think、ORG、Com包的导入以系统基类库为相对起始目录,否则就认为是
项目应用类库为起始目录,如果是其它情况的导入,需要指定baseUrl参数,也就是import方法的第二个参数。例如,要导入当前文件所在目录下面的RBAC/AccessDecisionManager.class.php 文件:
- Import('RBAC. AccessDecisionManager',dirname(__FILE__));
Import方法具有智能的模式匹配导入机制,例如下面的例子使用了更高级的匹配模式导入:
- Import("Think.*.Array");Import("ORG.Util.Array*");Import("ORG.Util.*Map");Import("App.Util.?Tool");
ThinkPHP的类文件命名规则是以.class.php作为后缀,所以默认的导入只会匹配.class.php为后缀的文件,如果你使用的第三方类库文件没有使用.class.php作为类文件命名规范,那么需要指定后缀,例如,导入Com.Zend.Search目录下面的所有类文件,但不包括子目录,并且这些类库文件的后缀是.php,我们就需要指定import方法的第三个参数ext:
- Import('Com.Zend.Search.*','','.php');
为了方便类似的导入机制,系统给第三方类库专门指定了一个import_v方法,该方法默认的导入类文件的后缀是.php,并且起始路径是ThinkPHP系统目录下面的Vendor目录。其它使用方法相同。