ThinkPHP 模拟了 Java 的类库导入机制,统一采用 import 方法进行类文件的加载。import 方法是 ThinkPHP 内建的类库和文件导入方法,提供了方便和灵活的文件导入机制,完全可以替代 PHP 的 require 和 include 方法。

但对于第三方类库,我们建议使用 vendor 方法来导入。

import 语法:

boolen import(class, baseUrl, ext)
参数说明:
参数 说明
class 必须,表示要导入的类库,采用命名空间的方式。
baseUrl 可选,表示导入的基础路径,省略的话系统采用默认的规则,具体见下文。
ext 可选,表示导入的类库后缀,默认是 .class.php 。

import 方法是 ThinkPHP 内置的一个普通函数,可以在模块操作内自由使用,可以参考 PHP include 和 require 的用法。

import 类库导入例子

导入 ThinkPHP 基类库文件

import 方法导入 ThinkPHP 基类库文件,约定导入 Think、ORG、Com 包以 ThinkPHP 系统基类库为相对起始目录:

// 导入 ThinkPHP系统目录/Lib/Think/Util/Session.class.php 文件
import("Think.Util.Session");
// 导入 ThinkPHP系统目录/Lib/ORG/Util/Page.class.php 文件
import("ORG.Util.Page");

导入项目应用类库文件

// 导入 MyApp项目 Lib/Action/UserAction.class.php 文件
import("MyApp.Action.UserAction");
// 导入 MyApp项目 Lib/ORG/Page.class.php 文件
import("MyApp.ORG.Page");
// 导入 MyApp项目 Lib/ORG/My/Image.class.php 文件
import("MyApp.ORG.My.Image");

如果是当前项目,可以简化为:

import("@.Action.UserAction");
import("@.ORG.Page");
import("@.ORG.My.Image");

这种写法有利于项目的移植。如果是导入其他项目的类库,必须指定项目名称:

import("OtherApp.Action.UserAction");

注意:使用这种方式导入其他项目的类库时,必须保证两个项目的目录是平级的,否则需要指定 baseUrl 参数。

指定 baseUrl 参数

对于以上导入系统类库和项目类库的情况,import 方法会自动识别类库导入的路径,其他情况就需要指定 baseUrl 参数。如导入当前文件所在目录下的 My.class.php 文件:

import("My",dirname(__FILE__));

指定 ext 参数

ext 参数表示导入的类库后缀,默认是 .class.php。如果导入的文件不是 *.class.php 格式的,可以指定 ext 参数。如导入当前文件所在目录下的 My.php 文件:

import("My",dirname(__FILE__),".php");

. 符号文件导入

在 import 方法中,. 符号是用于表示目录层次的,如果需要导入的文件名包含有 . 符号,如 User.Info.class.php ,那么需要以 # 号来代替 . 号:

import("@.Action.User#Info");

别名导入

如果在别名定义文件定义了别名:

'AdvModel' => THINK_PATH.'/Lib/Think/Core/Model/AdvModel.class.php',

可以使用 import 方法以别名的方式导入对应的类库文件:

import('AdvModel');

系统默认的别名定义文件位于 ThinkPHP 系统目录下的 Commonalias.php,也可以定义项目自己的别名文件。

其他说明

同名文件导入冲突

import 方法具有缓存和检测机制,相同的文件不会重复导入,如果发现导入了不同的位置下面的同名类库文件,系统会提示冲突,例如:

import("Think.Util.Array");
import("App.Util.Array");

上面的情况导入会产生引入两个同名的 Array.class.php 类,即使实际上的类名可能不存在冲突,但是按照 ThinkPHP 命名规范,类名和文件名是一致的,所以系统会抛出类名冲突的异常,并终止执行。

什么时候需要使用 import 方法?

import 方法用于导入当前需要而 ThinkPHP 又不能自动载入的文件,如系统基类 ORG 与 Com 目录下的扩展基类,自己的类库等。至于第三方类库,也可以使用 import 方法导入,但建议使用 vendor 方法导入。

import 方法与 import 标签的区别

import 方法用于模块操作中导入不能自动加载的文件类库,import 标签用于在模板中导入外部 Js 和 CSS 文件。

import 方法与 PHP6 import

在未来的 PHP6 版本中开始支持命名空间和 import 关键字,因此可以预见,ThinkPHP 可能会对 import 方法加以改写。

 

ThinkPHP import 类库导入 include PHP文件的更多相关文章

  1. thinkphp或者kohana 导入和读取文件

    1.无论是那个框架的导入,其实都是一样的原理的,但是首先我们要导入包,可能就这点不同. kohana的导入包的方法:require_once(Kohana::find_file('vendor','P ...

  2. 使用neo4j图数据库的import工具导入数据 -方法和注意事项

    背景 最近我在尝试存储知识图谱的过程中,接触到了Neo4j图数据库,这里我摘取了一段Neo4j的简介: Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌 ...

  3. ThinkPHP vendor 方法导入第三方类库

    ThinkPHP 3.2 vendor()方法的深入研究及Phpqrcode的正确扩展 ThinkPHP vendor 方法导入第三方类库 第三方类库 第三方类库指除了 ThinkPHP 框架.应用项 ...

  4. thinkPHP 类库映射 类库导入

    遵循我们上面的命名空间定义规范的话,基本上可以完成类库的自动加载了,但是如果定义了较多的命名空间的话,效率会有所下降,所以,我们可以给常用的类库定义类库映射.命名类库映射相当于给类文件定义了一个别名, ...

  5. 关于Eclipse 和 IDEA 导入library库文件 的步骤

    这里我们以PullToRefresh(上拉刷新下拉加载)组件的library为例 下载地址: https://github.com/chrisbanes/Android-PullToRefresh 现 ...

  6. .m文件导入C++头文件带来的错误

    这几天的工作挖了不少的坑.遇到了各种千奇百怪的错误,如今好好总结一下. 新建一个project,然后新建HelloCPP.h,HelloCPP.cpp文件.HelloCPP.h文件内容例如以下: #i ...

  7. thinkphp import标签

    传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用: 直线电机哪家好 <script type='text/javascript' src='/Public/Js/Util/Array ...

  8. js导入外部脚本文件

    JS 语言没找到导入外部脚本文件的功能,只能通知宿主程序来处理. function include(path){ var a=document.createElement("script&q ...

  9. 如何导入大sql文件到虚拟主机mysql数据库

    大部分网站虚拟主机为了安全起见,都限制了通过命令或者phpMyAdmin导入大sql文件到mysql数据库,例如godaddy只允许站长通过phpMyAdmin上传不超过2m的sql文件,但实际上我们 ...

随机推荐

  1. WEB前端开发的思考与感悟

    当我想要认真写一篇文章向大家分享我对前端的认识与感悟的时候,突然就深刻的体会到了这句话确实太有道理了. 最近几年对于web前端的传闻很多,比如人才稀缺,简单易学,待遇丰厚,整体势头发展良好等等.遇到过 ...

  2. windows下使用Ant编译Android项目

    1. 安装ant,配置环境变量 2. 执行命令: android update project -p 项目路径 例:android update project -p D:\project\UI_de ...

  3. UNITY编辑器模式下static变量的坑

    在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包函数执行完后系统不会帮我们清空 #if UN ...

  4. css content属性

    content 属性与 :before 及 :after 伪元素配合使用,来插入生成内容. 用于定义元素之前或之后放置的生成内容.默认地,这往往是行内内容,不过该内容创建的框类型可以用属性 displ ...

  5. 【CDN+】Kafka 的初步认识与入门

    前言 项目中用到了Kafka 这种分布式消息队列来处理日志,本文将对Kafka的基本概念和原理做一些简要阐释 Kafka 的基本概念 官网解释: Kafka是最初由Linkedin公司开发,是一个分布 ...

  6. CentOS7.X安装FastDFS-5.10

    安装准备 yum install \ vim \ git \ gcc \ gcc-c++ \ wget \ make \ libtool \ automake \ autoconf \ -y \ 安装 ...

  7. ETCD 简介及基本用法

    ETCD 项目地址 ETCD 官方文档 1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. 特点 简单:安装配置使用简单 ...

  8. Vagrant 手册之 box - 版本

    原文地址 从 Vagrant 1.5 版本起,box 开始支持版本.这运行创建 box 的人提交更新,使用 box 的人检查更新.更新 box 并查看变更记录. 对于 Vagrant 新手,box 版 ...

  9. Fedora 26 安装搜狗拼音输入法 sogoupinyin

    Fcitx 官方 wiki Fcitx GitHub Arch wiki 上关于 Fcitx 的资料 故障排除可以参考这里 Fedora 中文社区 Fedora 中文社区软件源 Fcitx (Flex ...

  10. WPF属性之理解附加属性

    附加属性,顾名思义,和被附加的控件没有依赖关系,只是强行给目标控件挂上一个“属性值”,以便于操作之.就好比,你在学校是学生,那么就要听老师的管教,在公司是下属,就要服从老板的命令一样. 我们常见的附加 ...