ThinkPHP之import方法实例详解


Posted in PHP onJune 20, 2014

import方法是ThinkPHP框架用于类库导入的封装实现,尤其对于项目类库、扩展类库和第三方类库的导入支持,import方法早期的版本可以和java的import方法一样导入目录和通配符导入,后来考虑到性能问题,在后续的版本更新中不断改进和简化了,所以现在的用法比较简单明了。调用格式:

import('类库名', '起始路径', '类库后缀')

imprt方法有一个别名vendor方法,专门用于导入第三方类库,区别在于起始路径和类库后缀默认值不同。

我们来分析下具体的用法:

1.导入系统基类库

系统基类库其实就是指的Think类库包,所在目录就是指框架的核心Lib目录,import方法可以用于导入系统基类库,例如:

import('Think.Util.Array');

表示导入系统目录下面的Lib/Util/Array.class.php 类库文件,相当于我们这样使用

require THINK_PATH.'Lib/Util/Array.class.php';

可以支持多级目录,例如:

import('Think.Util.U1.ClassA');
import('Think.Util.U1.A2.ClassB');

通过import方法导入类库后,就可以进行类库的实例化操作了。

2.导入扩展类库

扩展类库位于Extend/Library目录下面,这是系统的公共扩展类库目录,目前支持的扩展类库包只有ORG和Com包。

import('ORG.Util.Image');
import('Com.Sina.OAuth');

会导入扩展目录下面的第三方类库(分别是Extend/Library/ORG/Util/Image.class.php和Extend/Library/Com/Sina/OAuth.class.php 类库文件),第三方类库包只能支持ORG和Com两种,下面的子目录可以随意添加。

3.导入项目应用类库

如果没有指定起始导入路径的话,类库包Think、ORG、Com之外的都会被认为是导入项目应用类库,例如:

import("MyApp.Action.UserAction");
import("MyApp.Model.InfoModel");

表示导入MyApp项目的UserAction和InfoModel类库文件,由于通常,我们都是导入当前项目下面的类库,所以可以简写成:

import("@.Action.UserAction");
import("@.Model.InfoModel");

@符号表示导入当前项目下面的类库,这种方式也一定程度上方便了项目类库的代码移植,如果项目名称改变或者移动到其它项目下面的时候,写法不需要改变。

4.导入非标准类库文件

这里所说的非标准类库文件,主要是指位于特殊位置或者非.class.php后缀的类库文件。像导入基类库、扩展类库和项目类库都是基于框架规范的目录下面,如果我们需要导入项目的Common目录下面的MyClass.php文件,则可以采用:

import('Common.MyClass',APP_PATH,'.php');

或者

import('MyClass',APP_PATH.'Common','.php');

或者要导入当前目录下面的RBAC类库

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

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

import("ORG.User.Info");

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

import("ORG.User#Info");

来导入。

5.第三方类库导入

ThinkPHP 的基类库都是以.class.php 为后缀的,这是系统内置的一个约定,当然也可以通过 import 的参数来控制, 为了更加方便引入其他框架和系统的类库, 系统还提供了一个import方法的别名vendor,专门用于导入第三方类库,并且默认的起始目录和类文件后缀有区别。第三方类库位于系统扩展目录下的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');

6.别名导入

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

return array(
  'rbac' =>LIB_PATH.'Common/Rbac.class.php',
  'page' =>LIB_PATH.'Common/Page.class.php',
 );

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

import("rbac");
import("page");

导入Rbac和Page类,别名导入方式禁止使用import方法的第二和第三个参数,别名导入方式的效率比命名空间导入方式要高效,缺点是需要预先定义相关别名。
可以为某些需要的类库定义别名,那么无需定义自动加载路径也可以快速的自动加载。

一般情况下,由于框架内部采用了自动加载方式,所以大多数情况下面不需要用户手动导入类库文件,通常用于导入扩展类库和第三方类库的情况居多。而且配合别名定义和自动加载路径的定义,也能减少用户手动导入类库的情况。

PHP 相关文章推荐
一篇不错的PHP基础学习笔记
Mar 18 PHP
php url地址栏传中文乱码解决方法集合
Jun 25 PHP
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
一个简单的php加密解密函数(动态加密)
Jun 19 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
php 批量添加多行文本框textarea一行一个
Jun 03 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
PHP中你应该知道的require()文件包含的正确用法
Jun 12 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
Oct 10 PHP
PHP网站常见安全漏洞,及相应防范措施总结
Mar 01 PHP
ThinkPHP之A方法实例讲解
Jun 20 #PHP
ThinkPHP之M方法实例详解
Jun 20 #PHP
php实现的短网址算法分享
Jun 20 #PHP
ThinkPHP3.1之D方法实例详解
Jun 20 #PHP
php写的AES加密解密类分享
Jun 20 #PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 #PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
Jun 20 #PHP
You might like
使用php重新实现PHP脚本引擎内置函数
2007/03/06 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
php简单实现MVC
2015/02/05 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
9个JavaScript评级/投票插件
2010/01/18 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
数据管理员的自我评价分享
2013/11/15 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
村干部承诺书
2014/03/28 职场文书
负责人任命书范本
2014/06/04 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
社区服务活动报告
2015/02/05 职场文书
个人廉政承诺书
2015/04/28 职场文书
优秀员工演讲稿
2019/06/21 职场文书
python not运算符的实例用法
2021/06/30 Python