首页 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践全文在线阅读

《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》25.1.3 常用概念

关灯直达底部

使用ThinkPHP时,需要对以下概念有比较深的认识。

1.MVC

ThinkPHP 5应用基于MVC(模型-视图-控制器)的方式来组织。MVC是一个设计模式,它强制性地使应用程序的输入、处理和输出分开。使用MVC的应用程序被分为3个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。

2.入口文件

用户请求的PHP文件,负责处理一个请求的生命周期,最常见的入口文件就是index.php,有时会为了某些特殊的需求而增加新的入口文件。例如,给后台模块单独设置的一个入口文件admin.php或者一个控制器程序入口think都属于入口文件。

3.应用

应用在ThinkPHP中是一个管理系统架构及生命周期的对象,由系统的/think/App类完成。应用通常在入口文件中被调用和执行,具有相同的应用目录(APP_PATH)的应用被认为是同一个应用,但一个应用可能存在多个入口文件。

应用具有自己独立的配置文件、公共(函数)文件。

4.模块

一个典型的应用是由多个模块组成的,这些模块通常都是应用目录下的一个子目录,每个模块都有自己独立的配置文件、公共文件和类库文件。ThinkPHP 5支持单一模块架构设计,如果你的应用下只有一个模块,那么这个模块的子目录可以省略。

5.控制器

每个模块拥有独立的MVC类库及配置文件,一个模块下有多个控制器负责响应请求,而每个控制器其实就是一个独立的控制器类。控制器主要负责请求的接收,并调用相关的模型处理,并最终通过视图输出。严格来说,控制器不应该过多地介入业务逻辑处理。

一个典型的Index控制器类如下。


namespace app/index/controller;class Index {    public function index    {        return 'index';    }    public function hello($name)    {        return 'Hello,'.$name;    }}  

6.操作

一个控制器包含多个操作(方法),操作方法是一个URL访问的最小单元。操作方法可以不使用任何参数,如果定义了一个非可选参数,则该参数必须通过用户请求传入。如果是URL请求,则通常使用$_GET或者$_POST方式传入。

上述Index控制器类包含两个操作方法:index和hello。

7.模型

模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。模型类并不一定要访问数据库,而且在ThinkPHP 5的架构设计中,只有进行实际的数据库查询操作时,才会进行数据库的连接,是真正的惰性连接。

ThinkPHP的模型层支持多层设计,因此可以对模型层进行更细化的设计和分工。例如,把模型层分为逻辑层、服务层、事件层等。

8.视图

控制器调用模型类后返回的数据通过视图组装成不同格式输出。视图根据不同的需求,决定调用模板引擎进行内容解析后输出还是直接输出。视图通常会有一系列的模板文件对应不同的控制器和操作方法,并且支持动态设置模板目录。

9.驱动

系统很多的组件都采用驱动式设计,从而可以更灵活的扩展,驱动类的位置默认是放入核心类库目录下,也可以重新定义驱动类库的命名空间,从而改变驱动的文件位置。

10.行为

行为(Behavior)是在预先定义好的一个应用位置执行的一些操作。它类似于AOP编程中的“切面”概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。所以,行为通常是和某个位置相关,行为的执行时间依赖于绑定到了哪个位置上。

要执行行为,首先要在应用程序中进行行为侦听。


// 在app_init位置侦听行为/think/Hook::listen('app_init');  

然后对某个位置进行行为绑定。


// 绑定行为到app_init位置/think/Hook::add('app_init','/app/index/behavior/Test');  

一个位置上如果绑定了多个行为,则按照绑定的顺序依次执行,除非遇到中断。

11.命名空间

ThinkPHP 5采用PHP的命名空间进行类库文件的设计和规划,并且符合PSR-4的自动加载规范。