thinkphp中的类库与引用import引入机制

简介:

ThinkPHP的类库包括基类库和应用类库

控制器类 模块名+Action 例如 UserAction、InfoAction 
模型类 模型名+Model 例如 UserModel、InfoModel

基类库是指符合ThinkPHP类库规范的系统类库,包括ThinkPHP的核心基类库和扩展基类库。核心基类库目录位于系统的Lib目录,核心基类库也就是Think类库,扩展基类库位于Extend/Library目录,可以扩展ORG 、Com扩展类库。核心基类库的作用是完成框架的通用性开发而必须的基础类和内置支持类等

其中Core下面包括

应用类库是指项目中自己定义或者使用的类库,这些类库也是遵循ThinkPHP的命名规范。应用类库目录位于项目目录下面的Lib目录。应用类库的范围很广,包括Action类库、Model类库或者其他的工具类库

可以用import加载,也可以自动加载。比如调用数据库类的时候,就可以直接M('User')或者D('User')。

ThinkPHP类库的导入区别于其他的框架并没有采用require或者require_once进行导入,所有类库导入都采用统一的机制,包含下面两种方式:

一、Import显式导入

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

import("Think.Util.Session");
import("App.Model.UserModel");

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

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

上面的情况导入会产生引入两个同名的Array.class.php 类,所以系统不会再次导入ORG.Util.Array类。

对于import方法,系统会自动识别导入类库文件的位置,ThinkPHP的约定是Think、ORG、Com包的导入作为基类库导入,否则就认为是项目应用类库导入。

import("Think.Util.Session");
import("ORG.Util.Page");

上面两个方法分别导入了Think基类库的Util/Session.class.php文件和ORG扩展类库包的Util/Page.class.php文件。
要导入项目的应用类库文件也很简单,使用下面的方式就可以了,和导入基类库的方式看起来差不多:

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

上面的方式分别表示导入MyApp项目下面的Lib/Action/UserAction.class.php和Lib/Model/InfoModel.class.php类文件。通常我们都是在当前项目里面导入所需的类库文件,所以,我们可以使用下面的方式来简化代码

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

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

import("ORG.User.Info");

方式加载的话就会出现错误,导致加载的文件不是ORG/User.Info.class.php 文件,而是ORG/User/Info.class.php 文件(最后一个点后面的值为类名),这种情况下,我们可以使用:

import("ORG.User#Info");

自动加载

在大多数情况下,我们无需手动导入类库,而是通过配置采用自动加载机制即可,自动加载机制是真正的按需加载,可以很大程度的提高性能。

系统会首先按照内置的规则来判断加载,系统规则仅针对行为类、模型类和控制器类,搜索规则如下:



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5041389.html,如需转载请自行联系原作者


相关文章
|
存储 Java 编译器
Java 10: 引入的新功能特性
Java是一门广泛使用的编程语言,在不断地发展与演进中。最近发布的Java 10引入了一些令人兴奋的新功能特性,本文将介绍其中一些重要的特性。
70 0
|
安全 Java 测试技术
Java 11: 引入的新功能特性
Java是一门广泛使用的编程语言,在不断地发展与演进中。最近发布的Java 11引入了一些令人兴奋的新功能特性,本文将介绍其中一些重要的特性。
87 0
|
18天前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
【10月更文挑战第19天】在 Java 中,可以通过设置 HTTP 响应头来确保 JavaScript 文件不被浏览器缓存。方法包括:1. 使用 Servlet 设置响应头,通过 `doGet` 方法设置 `Expires`、`Cache-Control` 和 `Pragma` 头;2. 在 Spring Boot 中配置拦截器,通过 `NoCacheInterceptor` 类和 `WebConfig` 配置类实现相同功能。这两种方法都能确保每次请求都能获取到最新的 JavaScript 内容。
|
12月前
|
Java API 开发者
Java 9中引入的模块系统是什么?它有什么作用?
Java 9中引入的模块系统是什么?它有什么作用?
109 2
|
PHP C语言 Python
import方法引入模块详解
import方法引入模块详解
|
编译器 Shell C++
如何在项目中引入googtest(上)——通过编译器引入库
如何在项目中引入googtest(上)——通过编译器引入库
140 0
|
开发框架 JavaScript 前端开发
HarmonyOS学习路之开发篇—Java UI框架(JS FA调用Java PA)
使用兼容JS的类Web开发范式的方舟开发框架提供了JS FA(Feature Ability)调用Java PA(Particle Ability)的机制,该机制提供了一种通道来传递方法调用、处理数据返回以及订阅事件上。
|
开发框架 JavaScript 前端开发
HarmonyOS学习路之开发篇—Java UI框架(使用工具自动生成JS FA调用PA代码)
JS FA(Feature Ability)调用PA (Particle Ability)是使用基于JS扩展的类Web开发范式的方舟开发框架所提供的一种跨语言能力调用的机制,用于建立JS能力与Java能力之间传递方法调用、处理数据返回以及订阅事件上报的通道。开发者可以使用FA调用PA机制进行应用开发,但直接使用该机制需要开发者手动撰写大量模板代码,且模板代码可能与业务代码相互耦合,使得代码可维护性和可读性较差。
|
Java 数据库连接 Spring
java面试题:解释对象/关系映射集成模块?
java面试题:解释对象/关系映射集成模块?
java面试题:解释对象/关系映射集成模块?
|
JavaScript
Webpack引入未模块化的库
Vue 项目中使用了 annotorious 插件,根据需要修改源码,但是修改过后的js文件无法通过 import 形式引入,纠结了好几天,现在把解决方案记录一下。
298 0
Webpack引入未模块化的库

相关课程

更多