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输出控制功能在简繁体转换中的应用
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
JS实现php的伪分页
May 25 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php中取得文件的后缀名?
Feb 20 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
PHP面向对象详解(三)
Dec 07 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
PHP数组编码gbk与utf8互相转换的两种方法
Sep 01 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
PHP 对象继承原理与简单用法示例
Apr 21 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
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Python绘图实现显示中文
2019/12/04 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
Servlet方面面试题
2016/09/28 面试题
大学生实习思想汇报
2014/01/12 职场文书
煤矿安全保证书
2015/02/27 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
民事调解书范文
2015/05/20 职场文书