ThinkPHP里的import方法用于类库导入的封装实现实例详解

分类:PHP_Python| 发布:佚名| 查看: | 发表时间:2014/7/1

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 如何封装类库,ThinkPHP里的import方法用于类库导入的封装实现实例详解相关推荐

  1. python里自带的绘画库是_Python绘图Turtle库详解

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...

  2. 基于Docker里的运行的tomcat容器进行部署Java Web项目详解

    引言:在centos-7环境装了docker后,通过docker创建一个tomcat容器,想部署Java web项目,结果就是找不到tomcat 容器的的webapps目录,导致部署不了项目,不过后来 ...

  3. JAVA计时函数的库_JAVA开发常用类库UUID、Optional、ThreadLocal、TimerTask、Base64使用方法与实例详解...

    1.UUID类库 UUID 根据时间戳实现自动无重复字符串定义 // 获取UUID public static UUID randomUUID() // 根据字符串获取UUID public stat ...

  4. php 调用日历控制,基于ThinkPHP实现的日历功能实例详解

    本文实例讲述了基于ThinkPHP实现的日历功能.分享给大家供大家参考,具体如下: 开发环境介绍 最新,闲来没事,便开发了一款简单的日历,来统计工作情况.为了开发便捷,使用ThinkPHP架构.界面如 ...

  5. Eclipse里的Java EE视图在哪里?MyEclipse里的Java EE视图在哪里?MyEclipse里的MyEclipse Java Enterprise视图在哪里?(图文详解)...

    为什么要写这篇博客呢? 是因为,最近接触一个web项目. 然后呢,Eclipse里的Java EE视图的位置与MyEclipse里不太一样.为了自己梳理日后查找,也是为了新手少走弯路. Eclipse ...

  6. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来定时任务apscheduler库(图文详解)...

    不多说,直接上干货!  Anaconda2 里 PS C:\Anaconda2\Scripts> PS C:\Anaconda2\Scripts> pip.exe install apsc ...

  7. python里遍历筛选xml文件_python xml.etree.ElementTree遍历xml所有节点实例详解

    python xml.etree.ElementTree遍历xml所有节点 XML文件内容: 代码: #-*- coding: UTF-8 -*- # 从文件中读取数据 import xml.etre ...

  8. php ajax 长轮询 表单,Thinkphp结合AJAX长轮询实现PC与APP推送详解

    前言 本文主要给大家介绍的关于Thinkphp结合AJAX长轮询实现PC与APP推送的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍. 实现逻辑 某个操作(比如新建一条公告)后,触发 ...

  9. [转载] python里字典的用法_python中字典(Dictionary)用法实例详解

    参考链接: Python字典dictionary copy方法 本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映 ...

最新文章

  1. R语言nrow函数获取dataframe或者matrix行计数统计
  2. 2016 KidCraft冬令营 一起来玩Scratch + MineCraft
  3. 正负样本比率失衡SMOTE
  4. phpunit 单元测试案例--签到任务
  5. B10_NumPy数组操作、修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除
  6. iosselect简单使用(三级联动)
  7. jquery包裹节点
  8. 韩顺平 linux视频教程
  9. php709,深度爆料评测bt2020与bt709有什么区别?哪个好?良心点评实际情况
  10. 一款上手即用的Java代码混淆工具
  11. wampserver下载安装使用教程
  12. 分布式数据库与缓存双写一致性方案解疑
  13. 解决Samba服务无法访问 网络名不再可用的问题
  14. avue-crud初始化下拉列表,以及复选框,默认选中
  15. android app与gprs通信,gprs连接管理app
  16. TCP IP地址和端口号设置
  17. SAP STMS导入队列显示队列末尾
  18. 2019年高校“史上最严”自主招生认可哪些奖项?释放哪些信号?
  19. 2019 年 DevOps 实践中最有价值的技能
  20. 搭建WordPress个人博客全过程(超详细)

热门文章

  1. 使用Statistics命令查看Netapp存储实时性能统计数据
  2. 牛客 NC201908 小睿睿的伤害(dsu on tree, 启发式合并)
  3. AAA企业信用等级证书
  4. 企业申请AAA企业信用等级认证的4大好处
  5. vue实现组件双向绑定
  6. 亚马逊基础名词汇总跨境电商入门小白必备!
  7. CAD编辑技巧之PDF转DWG和DWG图纸的编辑
  8. 电路串联和并联图解_什么是串联,什么是并联…求图解
  9. gflags,glog,gtest学习
  10. php x24 x65 x6d x61,Jboss远程代码执行漏洞CVE:2013-4810获得system权限