ThinkPHP函数详解:import方法

ThinkPHP函数详解:import方法

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


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

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

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

导入系统基类库

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

  1. import('Think.Util.Array');
复制代码

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

  1. require THINK_PATH.'Lib/Util/Array.class.php';
复制代码

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

  1. import('Think.Util.U1.ClassA');
复制代码
  1. import('Think.Util.U1.A2.ClassB');
复制代码

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

导入扩展类库

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

  1. import('ORG.Util.Image');
  2. import(‘Com.Sina.OAuth’);
复制代码

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

导入项目应用类库

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

  1. import("MyApp.Action.UserAction");
  2. import(“MyApp.Model.InfoModel”);
复制代码

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

  1. import("@.Action.UserAction");
  2. import(“@.Model.InfoModel”);
复制代码

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

导入非标准类库文件

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

  1. import('Common.MyClass',APP_PATH,'.php');
复制代码

或者

  1. import('MyClass',APP_PATH.'Common','.php');
复制代码

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

  1. import("RBAC.AccessDecisionManager",dirname(__FILE__),".php");
复制代码

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

  1. import("ORG.User.Info");
复制代码

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

  1. import("ORG.User#Info");
复制代码

来导入。

第三方类库导入

ThinkPHP 的基类库都是以.class.php 为后缀的,这是系统内置的一个约定,当然也可以通过 import 的参数来控制, 为了更加方便引入其他框架和系统的类库, 系统还提供了一个import方法的别名vendor,专门用于导入第三方类库,并且默认的起始目录和类文件后缀有区别。第三方类库位于系统扩展目录下的Vendor 目录, 例如,我们把 Zend 的 Filter\Dir.php 放到 Vendor 目录下面,这个时候 Dir 文件的路径就是 Vendor\Zend\Filter\Dir.php,我们使用vendor 方法导入只需要使用:

  1. Vendor('Zend.Filter.Dir');
复制代码

就可以导入Dir类库了。

Vendor方法也可以支持和import方法一样的基础路径和文件名后缀参数,例如:

  1. Vendor('Zend.Filter.Dir',dirname(__FILE__),'.class.php');
复制代码

别名导入

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

  1. return array(
  2.     ‘rbac’ =>LIB_PATH.’Common/Rbac.class.php’,
  3.     ‘page’ =>LIB_PATH.’Common/Page.class.php’,
  4. );
复制代码

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

  1. import("rbac");
  2. import(“page”);
复制代码

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114079.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java表单提交方法_表单提交的几种方式[通俗易懂]

    java表单提交方法_表单提交的几种方式[通俗易懂]通用提交按钮–>2、提交3、说明:用户提交按钮或图像按钮时,就会提交表单。使用或都可以定义提交按钮,只要将其特性的值设置为“submit”即可,而图像按钮则是通过的type特性值设置为”image”来定义的。因此,只要我们单击一下代码生成的按钮,就可以提交表单。4、阻止表单提交只要在表单中存在上面列出的任何一种按钮,那么相应表单控件拥有焦点的情况下,按回车键就可以提交表单。如果表单里没有提…

    2022年9月16日
    2
  • 奔图m7160dw驱动_奔图打印机m7100dn

    奔图m7160dw驱动_奔图打印机m7100dn奔图M7100dW打印机驱动是专门为奔图旗下的M7100dW型号打印机打造的驱动程序。它能够为你解决打印机常见的无法扫描、无法识别等问题。他是连接打印机与电脑的桥梁,让你更好的操作这款的打印机。【打印机特色】1、操作便捷,乐在其中ECOSYSP2135dn外观小巧,空间适应度很高,可以更好地满足用户办公空间布置的需要。而且外形美观,放置在办公桌上能够与办公家具很好地融合在一起,营造出和谐的办公室…

    2022年8月30日
    3
  • 更新本地DNS缓存列表[通俗易懂]

    更新本地DNS缓存列表[通俗易懂]更新本地DNS缓存列表当我们以域名形式访问过目标网站后,该网站的域名和IP地址对应关系就会自动保存到本地工作站的DNS缓存列表中,日后IE浏览器会优先访问DNS缓存列表中的信息,不过一旦此时目标站点的域名和IP地址对应关系发生变动的话,DNS缓存列表中的对应解析记录不会跟着同步变化,那么日后我们再次以域名形式访问目标站点时就容易发生DNS解析不成功的故障。这个时候,…

    2022年5月5日
    97
  • python开发h5页面_大数据和python有关吗

    python开发h5页面_大数据和python有关吗文章目录前言HDF与h5简介数据组织方式HDFView下载与安装在WIN10系统安装后打开出现黑框闪退的解决方法python对h5文件的操作批量制作h5文件h5文件的提取,另存为nii文件前言一般来说,深度学习的训练数据和训练后的参数都会保存为h5格式文件,对于训练数据来说,深度学习中当训练大量数据时,如果从硬盘中加载再预处理,再传递进网络,这是一个非常耗时的过程。其中从硬盘中读取图片会花费大量时间,更可行在方法是将其存在单个文件中,如h5文件。那么h5文件对于深度学习训练具有什么优势呢?可以支持

    2025年9月12日
    6
  • 网站优化怎样的外链能轻松收录,网站外链优化攻略「建议收藏」

    网站优化怎样的外链能轻松收录,网站外链优化攻略「建议收藏」有些事情,让你感到很无奈,网站外链优化也是如此,往往那些很容易发布网站外链的地方,价值不大,而不容易发布外链的地方,一旦发布上去了,效果胜过几十条甚至更多的外链,而且可以轻松让搜索引擎收录,网站优化怎样让网站外链轻松被收录呢?<ignore_js_op>一、善于寻找我们运营的是网站,发布外链的地方也是网站,除了内容有差异之外,权重高低也有差别,我们要找的自然是高于我们权重的网站,…

    2022年7月21日
    15
  • vs2010查看quartz.net 2.1.2的源码时其中一报错的解决方法

    vs2010查看quartz.net 2.1.2的源码时其中一报错的解决方法

    2021年8月24日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号