1.1、获取ThinkPHP 3.2
获取ThinkPHP的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源。
官网提供了稳定版本的下载:http://thinkphp.cn/down/framework.html
官网下载版本提供了完整版和核心版两个版本,核心版本只保留了核心类库和必须的文件,去掉了所有的扩展类库和驱动,支持标准模式和SAE模式。
如果你希望保持最新的更新,可以通过github获取当前最新的版本(完整版)。
Git获取地址列表(你可以选择一个最快的地址):
Github:
https://github.com/liu21st/thinkphp
Oschina:http://git.oschina.net/liu21st/thinkphp.git
Code:https://code.csdn.net/topthink2011/ThinkPHP
Coding:https://coding.net/u/liu21st/p/thinkphp/git
3.2版本也支持composer安装,确保你的电脑已经安装了composer,然后在你的web根目录下面执行composer create-project topthink/thinkphp your-project-name
(注意:目前国内的速度很慢 建议直接下载官网版本)
ThinkPHP无需任何安装,直接拷贝到你的电脑或者服务器的WEB运行目录下面即可。
1.2、环境要求
框架本身也没有什么特别的要求,具体的应用系统运行环境要求视开发所涉及的模块。ThinkPHP底层运行的内存消耗极低,而本身的文件大小也是轻量级的, 因此不会出现空间和内存占用的瓶颈。
PHP的版本要求:
- PHP5.3以上版本(注意:PHP5.3dev版本和PHP6均不支持)
支持的服务器和数据库环境
- 支持Windows/Unix服务器环境
- 可运行包括Apache、IIS、和Nginx在内的多种Web服务器和模式
- 可支持MySQL、MSSQL、PgSQL、 Sqlite、 Orcale、Ibase、 Mongo等多种数据库和连接
对于刚刚接触PHP或者ThinkPHP的新手,我们推荐使用集成开发环境WAMPServer(wampserver是一个集成了Apache、PHP和MySQL的开发套件,而且支持不同PHP版本、MySQL版本和Apache版本的切换)来使用ThinkPHP进行本地开发和测试。
1.3、目录结构
下载框架后,解压缩到web目录下面,可以看到初始的目录结构如下:
www WEB部署目录(或者子目录)
开发人员可以在这个基础上灵活调整。其中, Application 和 public目录下面是空的
├─index.php 入口文件
├─README.md README文件
├─Application 应用目录
├─Public 资源文件目录
└─ThinkPHP 框架目录
README.md文件仅用于说明,实际部署的时候可以删除。
上面的目录结构和名称是可以改变的,这取决于你的入口文件和配置参数。
Application目录默认是空的,但是第一次访问入口文件会自动生成,参考后面的入口文件部分。
其中框架目录ThinkPHP的结构如下:
├─ThinkPHP 框架系统目录(可以部署在非web目录下面)
│ ├─Common 核心公共函数目录
│ ├─Conf 核心配置目录
│ ├─Lang 核心语言包目录
│ ├─Library 框架类库目录
│ │ ├─Think 核心Think类库包目录
│ │ ├─Behavior 行为类库目录
│ │ ├─Org Org类库包目录
│ │ ├─Vendor 第三方类库目录
│ │ ├─ ... 更多类库目录
│ ├─Mode 框架应用模式目录
│ ├─Tpl 系统模板目录
│ ├─LICENSE.txt 框架授权协议文件
│ ├─logo.png 框架LOGO文件
│ ├─README.txt 框架README文件
│ └─ThinkPHP.php 框架入口文件
1.4、入口文件
Thinkphp采用单入口文件进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口。
应该说,所有的应用都是从入口文件开始的,并且不同应用的入口文件是类似的。
入口文件的定义:
入口文件主要完成:
1.定义框架路径、项目路径(可选)
2.定义调试模式和应用模式(可选)
3、定义系统常量(可选)
4、载入框架入口文件(必须)
默认情况下,框架已经自带了一个应用入口文件(以及默认的目录结构),内容如下:
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
如果你改变了项目目录(例如把Application
更改为Apps
),只需要在入口文件更改APP_PATH常量定义即可:
define('APP_PATH','./Apps/');
require './ThinkPHP/ThinkPHP.php';
注意:APP_PATH的定义支持相对路径和绝对路径,但必须以“/”结束
如果你调整了框架核心目录的位置或者目录名,只需要这样修改:
define('APP_PATH','./Application/');
require './Think/ThinkPHP.php';
也可以单独定义一个THINK_PATH常量用于引入:
define('APP_PATH','./Application/');
define('THINK_PATH',realpath('../Think').'/');
require THINK_PATH.'ThinkPHP.php';
和APP_PATH一样THINK_PATH路径定义也必须以“/”结尾。
给THINK_PATH和APP_PATH定义绝对路径会提高系统的加载效率。入口文件中的其他定义
一般不建议在入口文件中做过多的操作,但可以重新定义一些系统常量,入口文件中支持定义(建议)的一些系统常量包括:
常量 描述 THINK_PATH 框架目录 APP_PATH 应用目录 RUNTIME_PATH 应用运行时目录(可写) APP_DEBUG 应用调试模式 (默认为false) STORAGE_TYPE 存储类型(默认为File) APP_MODE 应用模式(默认为common) 注意:所有路径常量都必须以“/”结尾
例如,我们可以在入口文件中重新定义相关目录并且开启调试模式:
// 定义应用目录
define('APP_PATH','./Apps/');
// 定义运行时目录
define('RUNTIME_PATH','./Runtime/');
// 开启调试模式
define('APP_DEBUG',True);
// 更名框架目录名称,并载入框架入口文件
require './Think/ThinkPHP.php';这样最终的应用目录结构如下:
www WEB部署目录(或者子目录)
├─index.php 应用入口文件
├─Apps 应用目录
├─Public 资源文件目录
├─Runtime 运行时目录
└─Think 框架目录
入口文件中还可以定义一些系统变量,用于相关的绑定操作(通常用于多个入口的情况),这个会在后面涉及,暂且不提。
1.5、自动生成
自动创建目录
在第一次访问应用入口文件的时候,会显示如图所示的默认的欢迎页面,并自动生成了一个默认的应用模块Home。
接下来再看原来空的
Application
目录下面,已经自动生成了公共模块Common
、默认的Home
模块和Runtime
运行时目录的目录结构:Application
├─Common 应用公共模块
│ ├─Common 应用公共函数目录
│ └─Conf 应用公共配置文件目录
├─Home 默认生成的Home模块
│ ├─Conf 模块配置文件目录
│ ├─Common 模块函数公共目录
│ ├─Controller 模块控制器目录
│ ├─Model 模块模型目录
│ └─View 模块视图文件目录
├─Runtime 运行时目录
│ ├─Cache 模版缓存目录
│ ├─Data 数据目录
│ ├─Logs 日志目录
│ └─Temp 缓存目录如果你不是Windows环境下面的话,需要对应用目录
Application
设置可写权限才能自动生成。
如果不是调试模式的话,会在Runtime目录下面生成common~runtime.php
文件(应用编译缓存文件)。目录安全文件
在自动生成目录结构的同时,在各个目录下面我们还看到了index.html文件,这是ThinkPHP自动生成的目录安全文件。
为了避免某些服务器开启了目录浏览权限后可以直接在浏览器输入URL地址查看目录,系统默认开启了目录安全文件机制,会在自动生成目录的时候生成空白的
index.html
文件,当然安全文件的名称可以设置,例如你想给安全文件定义为default.html
可以在入口文件中添加:define('DIR_SECURE_FILENAME', 'default.html');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';如果你的环境足够安全,不希望生成目录安全文件,可以在入口文件里面关闭目录安全文件的生成,例如:
define('BUILD_DIR_SECURE', false);
1.6、模块
下载后的框架自带了一个应用目录结构,并且带了一个默认的应用入口文件,方便部署和测试,默认的应用目录是Application(实际部署过程中可以随意设置),应用目录只有一个,因为大多数情况下,我们都可以通过多模块化以及多入口的设计来解决应用的扩展需求。
模块设计
新版采用模块化的设计架构,下面是一个应用目录下面的模块目录结构,每个模块可以方便的卸载和部署,并且支持公共模块。
Application 默认应用目录(可以设置)
├─Common 公共模块(不能直接访问)
├─Home 前台模块
├─Admin 后台模块
├─... 其他更多模块
├─Runtime 默认运行时目录(可以设置)每个模块是相对独立的,其目录结构如下:
├─Module 模块目录
│ ├─Conf 配置文件目录
│ ├─Common 公共函数目录
│ ├─Controller 控制器目录
│ ├─Model 模型目录
│ ├─Logic 逻辑目录(可选)
│ ├─Service Service目录(可选)
│ ... 更多分层目录可选
│ └─View 视图目录由于采用多层的MVC机制,除了Conf和Common目录外,每个模块下面的目录结构可以根据需要灵活设置和添加,所以并不拘泥于上面展现的目录
1.7、控制器
我们可以在自动生成的Application/Home/Controller目录下面找到一个
IndexController.class.php
文件,这就是默认的Index控制器文件。控制器类的命名方式是:控制器名(驼峰法,首字母大写)+Controller
控制器文件的命名方式是:类名+class.php(类文件后缀)
默认的欢迎页面其实就是访问的Home模块下面的Index控制器类的index操作方法 我们修改默认的index操作方法如下:
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
echo 'hello,world!';
}
}再次运行应用入口文件,浏览器会显示:
hello,world!
。我们再来看下控制器类,IndexController控制器类的开头是命名空间定义:
namespace Home\Controller;
这是系统的规范要求,表示当前类是Home模块下的控制器类,命名空间和实际的控制器文件所在的路径是一致的,也就是说:
Home\Controller\IndexController
类 对应的控制器文件位于应用目录下面的Home/Controller/IndexController.class.php
,如果你改变了当前的模块名,那么这个控制器类的命名空间也需要随之修改。注意:命名空间定义必须写在所有的PHP代码之前声明,而且之前不能有任何输出,否则会出错
use Think\Controller;
表示引入 Think\Controller 类库便于直接使用。 所以,
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller等同于使用:
namespace Home\Controller;
class IndexController extends \Think\Controller
1.8、命名规范
命名规范
使用ThinkPHP开发的过程中应该尽量遵循下列命名规范:
- 类文件都是以.class.php为后缀(这里是指的ThinkPHP内部使用的类库文件,不代表外部加载的类库文件),使用驼峰法命名,并且首字母大写,例如
DbMysql.class.php
;- 类的命名空间地址和所在的路径地址一致,例如
Home\Controller\UserController
类所在的路径应该是Application/Home/Controller/UserController.class.php
;- 确保文件的命名和调用大小写一致,是由于在类Unix系统上面,对大小写是敏感的(而ThinkPHP在调试模式下面,即使在Windows平台也会严格检查大小写);
- 类名和文件名一致(包括上面说的大小写一致),例如
UserController
类的文件命名是UserController.class.php
, InfoModel类的文件名是InfoModel.class.php
, 并且不同的类库的类命名有一定的规范;- 函数、配置文件等其他类库文件之外的一般是以
.php
为后缀(第三方引入的不做要求);- 函数的命名使用小写字母和下划线的方式,例如
get_client_ip
;- 方法的命名使用驼峰法,并且首字母小写或者使用下划线“_”,例如
getUserName
,_parseType
,通常下划线开头的方法属于私有方法;- 属性的命名使用驼峰法,并且首字母小写或者使用下划线“_”,例如
tableName
、_instance
,通常下划线开头的属性属于私有属性;- 以双下划线“__”打头的函数或方法作为魔法方法,例如
__call
和__autoload
;- 常量以大写字母和下划线命名,例如
HAS_ONE
和MANY_TO_MANY
;- 配置参数以大写字母和下划线命名,例如
HTML_CACHE_ON
;- 语言变量以大写字母和下划线命名,例如
MY_LANG
,以下划线打头的语言变量通常用于系统语言变量,例如_CLASS_NOT_EXIST_
;- 对变量的命名没有强制的规范,可以根据团队规范来进行;
- ThinkPHP的模板文件默认是以
.html
为后缀(可以通过配置修改);- 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如
think_user
表和user_name
字段是正确写法,类似_username
这样的数据表字段可能会被过滤。特例:在ThinkPHP里面,有一个函数命名的特例,就是单字母大写函数,这类函数通常是某些操作的快捷定义,或者有特殊的作用。例如:A、D、S、L 方法等等,他们有着特殊的含义,后面会有所了解。
由于ThinkPHP默认全部使用UTF-8编码,所以请确保你的程序文件采用UTF-8编码格式保存,并且去掉BOM信息头(去掉BOM头信息有很多方式,不同的编辑器都有设置方法,也可以用工具进行统一检测和处理),否则可能导致很多意想不到的问题。
开发建议
在使用ThinkPHP进行开发的过程中,我们给出如下建议,会让你的开发变得更轻松:
- 遵循框架的命名规范和目录规范;
- 开发过程中尽量开启调试模式,及早发现问题;
- 多看看日志文件,查找隐患问题;
- 养成使用I函数获取输入变量的好习惯;
- 更新或者环境改变后遇到问题首要问题是清空Runtime目录;