ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。
 
一、安装ThinkPHP5
 
安装需求:PHP版本不得小于5.4;
 
1、从官网进行下载安装
 
2、通过composer进行安装
 
如果还未安装composer,请先安装composer并配置环境变量
 
运行如下命令,进行安装:
 
composer create-project topthink/think=5.0.* tp5 --prefer-dist
 
3、通过git安装
 
3.1、运行如下命令,安装thinkphp的应用项目
 
git clone https://github.com/top-think/think tp5
 
安装成功后的界面:如下图所示
 
 
3.2、进入到刚才已下载的tp5目录下,运行如下命令,安装thinkphp的核心框架
 
git clone https://github.com/top-think/framework thinkphp
 
安装成功后的界面:如下图所示
 
 
安装完成,验证是否安装成功,在浏览器中输入:http://hostname/tp5/public/
 
如果浏览器显示如下图所示,则说明框架安装成功。
 
 
 
二、目录结构框架的目录结构,如下图所示:
 
 
application:应用目录
 
 
index:模块目录
 
 
index/config.php:模块配置文件
 
index/common.php:模块公共函数文件
 
index/controller:控制器目录
 
index/model:模型目录
 
index/view:视图目录
 
config.php:应用配置文件
 
command.php:命令工具配置文件
 
common.php:应用公共函数文件
 
tags.php:应用行为扩展定义文件
 
extend:扩展类库目录
 
 
public:WEB 部署目录(对外访问目录)
 
 
static:静态资源存放目录(css,js,image)
 
index.php:应用入口文件
 
.htaccess:用于apache重写
 
router.php:快速测试文件
 
runtime:应用的运行时目录
 
 
vendor:通过composer安装的第三方类库目录
 
 
thinkphp:系统核心目录
 
 
lang:系统语言包目录
 
library:框架核心类库目录
 
tpl:系统模板目录
 
base.php:基础定义文件
 
route:路由配置目录
 
 
三、ThinkPHP框架最基本的架构
 
thinkphp是基于MVC模式开发的,业务逻辑、数据、界面显示分离,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
 
1、入口文件
 
用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件。入口文件的内容如下:
 
 
在入口文件index.php中加载了基础文件base.php文件,在base.php中干了这样一些事情:
 
载入Loader类
 
注册自动加载
 
注册错误和异常处理机制
 
实现日志接口
 
注册类库别名
 
 
加载完基础文件之后,最后在index.php中执行应用并响应。
 
2、应用
 
ThinkPHP的应用是一个管理系统架构及生命周期的对象,由系统创建完成,应用通常在入口文件中被调用和执行,每个应用都具有自己独立的模块、config配置文件以及common公共函数文件。
 
3、模块
 
一个应用是可能是由多个模块组成的,通俗的来说,这些模块即为该应用目录下面的一个个的子目录,每个模块都有自己独立的MVC结构、config配置文件以及common公共函数文件。
 
注:模块名称请避免使用PHP保留关键字,否则会造成系统错误。
 
4、控制器
 
控制器主要负责接收发送过来的请求,并调用相关的模型业务逻辑的数据处理,并最终将用户请求数据渲染到视图页面上。
 
5、模型
 
模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。在定义模型时,要注意和表名对应,因为框架中的模型会自动对应数据库中的数据表。在ThinkPHP中模型类的命名规则是除去表前缀的数据表名称,命名方式采用的驼峰命名法,而且模型的首字母要大写。
 
6、视图
 
视图接收从控制器渲染过来的数据,将数据渲染的成用户可见的页面。
 
7、命名空间
 
命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。
 
通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。