[TOC]
## 为什么是 PHP?
PHP 全称是 PHP: Hypertext Preprocessor,译为:『超文本预处理器』。是一门开源脚本语言,专为『动态 Web 开发』而生。
PHP 在服务器脚本语言市场占有率中遥遥领先于其他对手:
![PHP Percent](http://tbs.zhanghong.info/images/chapters/01/030_php_percent.png)
上图是由 [W3Techs](https://w3techs.com/technologies/overview/programming_language/all) 网站提供的 [服务器端脚本语言市场占有率](https://w3techs.com/technologies/overview/programming_language/all) 排名,数据样本是 [Alexa](http://www.alexa.com/) 世界排名 前一千万 的网站,其中 82.6% 使用 PHP 构建,此数据每日更新。可以看出 PHP 惊人的市场占有率。世界上大部分的商业网站在使用 PHP,可想而知这些企业对 PHP 的人才需求能有多巨大。
>[info] 扩展阅读:[为什么 PHP 是最好的语言?现在是,将来也会是](https://zhuanlan.zhihu.com/p/26704744)
### 作为职业
如果你在选择职业,巨大的市场占有率有以下好处:
- 人才需求大 - 好找工作;
- 学习的人多 - 资料多,社区活跃;
- 解决方案多 - 开发中基本上遇不到什么技术难题。
### 架构选型
如果你是创业者或者技术负责人,在做技术架构选型,PHP 的巨大的市场占有率有以下好处:
- 招人好招 - 笔者是由 RoR (Ruby On Rails)『入坑』程序员这个行业,并且一直很喜欢 ROR 的优美和敏捷,但由于 RoR 学习人太少(勿拍,这里指的是相比 PHP 和 Java 这些语言)并且很多时侯招到新人时还要手把手从零开始培训一段时间,特别是近几年随着各语言和 Web 框架的蓬勃发展 RoR 在 Web 敏捷开发方面的优势越来越不明显,所以使用 RoR 五六年后随公司技术转型进入 PHP 这个行列;
- 解决方案多 - PHP 有很多优质的开源软件,拿过来直接就能使用。另外,作为日常开发,也是非常方便。举个有趣的例子:很多第三方开发者服务 SDK 包优先考虑的就是先出个 PHP 的 SDK,原因就是PHP 占有率高。
## 什么是 ThinkPHP 框架?
[ThinkPHP 框架] (http://www.thinkphp.cn) 是上海顶想信息科技有限公司开发的一个采用 MVC 架构模式的快速、兼容而且简单的轻量级国产 PHP 开发框架。从 2007 年元旦正式更名为 ThinkPHP 至今,已经发展到 `6.0` 版本。
ThinkPHP 框架从第一个版本开始就具有简单、敏捷和轻量级等优秀特质,所以从诞生以来深受国内 PHP 开发人员喜爱,经常做为微小企业和创业公司的首选开发框架。特别是从 `5.0` 版本开始支持 composer 以来更是为工程师开发项目带来更多的便捷。
## 为什么 ThinkPHP 框架如此受欢迎?
虽然 Symfony 、Yii 和 Laravel 等框架在国内也很受欢迎,特别是 Laravel 框架由于它的优雅和敏捷这两年一时风头无两,但是在国内 PHP 项目开发中 ThinkPHP 框架还是占有很大的市场,深受微小企业和创业公司的喜爱。
笔者觉得 ThinkPHP 框架之所以在国内如此受欢迎,除了『国产』这个因素外,主要有以下几点原因:
- 强调与注重敏捷开发;
- 约定高于配置(Convention over configuration);
- 简单易用。
虽然 ThinkPHP 框架如此受欢迎,但我们必须清楚的认识到它和其它框架相比的不足之处,例如它在 **约定高于配置** 、 **DRY(Don't repeat yourself)** 、第三方扩展和社区活动度等方面都不如 Laravel 框架。
## 为什么和 Laravel 框架比较?
有些同学可能会疑惑为什么在本教程里讲到一些知识点时要和 Laravel 框架框架进行比较?在教程里,我们之所以对比 Laravel 框架是因为 ThinkPHP 6.0 框架的很多功能以及架构设计上都和 Lavavel 框架非常相似。所以,在本教程里我们对比两个框架是为了方便大家在熟练掌握 ThinkPHP 之后可以快速掌握 Laravel 框架开发,毕竟技多不压身。
## 国内 ThinkPHP 框架生态圈在哪?
ThinkPHP 框架目前比较活跃的社区有:
- [ThinkPHP官网](http://www.thinkphp.cn/)
- [看云](https://www.kancloud.cn/dashboard)
- [LearnKu ThinkPHP社区](https://learnku.com/thinkphp)
## ThinkPHP 框架版本类型有哪些?
ThinkPHP 框架有两个版本类型:
1. LTS 版本 - 长期支持版本,英文 Long Term Support 的缩写,此类版本是 ThinkPHP 能提供的最长时间维护版本;
2. 一般发行版 - 通常只提供 6 个月的 Bug 修复支持,一年的安全修复支持。
### 什么是『长期支持』?
>[info] 长期支持 (英语:Long-term support,缩写:LTS)是一种软件的产品生命周期政策,特别是开源软件,它增加了软件开发过程及软件版本周期的可靠度。长期支持延长了软件维护的周期;它也改变了软件更新(补丁)的类型及频率以降低风险、费用及软件部署的中断时间,同时提升了软件的可靠性。但这并不必然包含技术支持。
在长期支持周期的开始,软件设计师会将软件特性冻结:他们制作补丁来修复程序错误及计算机安全隐患,但不会加入新的,可能会造成软件破坏的功能。软件维护者可能会单独发布补丁,或是将其置于维护版本、小数点版本或是服务包中发布。支持周期结束后,其称之为产品的生命周期结束。
“长期支持” 这个术语通常是保留给特殊的软件版本,其他版本会有更短的生命周期。通常来说,长期支持版本至少会被维护两年。From [维基百科](https://zh.wikipedia.org/w/index.php?title=%E9%95%B7%E6%9C%9F%E6%94%AF%E6%8F%B4&redirect=no)
### ThinkPHP 框架有着怎样的版本计划?
由于 3.2 及以前版本发布时间太早、官方已经停止更新维护并且现在新项目开发时不推荐使用,所以笔者只整理了 5.0 以来的版本大致发布计划,最终发布时间可能会有所变动,如果你比较在意版本发布计划请多留意官方计划公告或 [开发者周刊](https://www.kancloud.cn/thinkphp/weekly/content) 。
| 版本 | PHP版本 | 版本类型 | 发布日期 | Bug修复 | 安全更新 |
| -------- | -------- | -------- |-------- | -------- | -------- |
| 5.0 | 5.4+ | 一般发行 | 2016-09-15 | 2019-01-01 | 2020-01-01 |
| 5.1 | 5.6+ | LTS发行 | 2018-01-01 | 2020-01-01 | 2021-01-01 |
| 6.0 | 7.1+ | 一般发行 | 2019-10-24 | 2020-04-24 | 2020-10-24 |
## 如何选择 ThinkPHP 框架版本?
首先 ThinkPHP 框架所有大的版本升级时由于对底层架构做了改进所以不向下兼容做的不是很好,如 6.0 不支持 5.1 的无缝升级, 5.1 不支持 5.0 的无缝升级,所以,虽然本书是介绍 使用 ThinkPHP6.0 开发项目,但在选择版本时由于角色和项目类型的不同,我们给出以下不同的建议:
- 如果你是新手,目的只是为了学习,请直接选用最新版本;
- 如果是现有项目,目的是学成后能对项目进行二次开发,请选用与项目匹配的版本进行学习;
- 如果是商业项目,请优先考虑 `LTS` 版本。
- 第一章 基础信息
- 序言
- 关于作者
- PHP和ThinkPHP
- 如何正确阅读本书
- 写作约定
- 开发规范
- 章节体例
- 本书源码
- 第二章 舞台布置
- 开发环境
- 产品分解
- Git和GitHub
- 创建项目
- 数据库视图管理工具
- 统一代码风格
- 目录结构
- 配置信息
- 后台应用搭建
- 助手函数
- 前台布局模板
- 基础控制器
- 小结
- 第三章 注册登录
- 数据迁移
- 表单提交
- 表单验证
- 模型验证
- 短信提供商
- 发送短信
- 手机验证
- 注册提醒
- 登录与退出
- 重置密码
- 数据填充
- 小结
- 第四章 用户相关
- 个人中心
- 编辑个人资料
- 上传图片
- 上传头像
- 显示头像
- 限制头像分辨率
- 裁剪头像
- 显示注册时间
- 授权访问
- 小结
- 第五章 帖子列表
- 话题分类
- 话题模型
- 话题列表
- 性能优化
- 分类话题列表
- 话题列表排序
- 用户发布的话题
- 分页器美化
- 小结
- 第六章_帖子CURD
- 创建话题
- 生成摘要
- 编辑器优化
- 上传图片
- 显示话题
- 编辑话题
- 删除话题
- 小结
- 第七章 帖子回复
- 回复模型
- 回复列表
- 发表回复
- 删除回复
- XSS 安全漏洞
- 小结
- 第八章 角色权限和管理后台
- 多角色用户权限
- 用户管理
- 话题管理
- 回复管理
- 小结
- 第九章 杂项
- 边栏活跃用户
- 用户最后登录时间
- 边栏资源推荐
- 站点首页
- 小结
- 第十章 总结
- 全书总结
- 附录
- 浅谈ThinkPHP6.0 路由