简介

PHP 是一门复杂的语言,经过多年折腾,使其不同版本之间高度不一致,有时还有些 bug。
每个版本都有自己独有的特性、多余和怪异之处,也很难跟踪哪个版本有哪些问题。
这也就很好理解为什么有时它会遭到那么多的厌恶。

尽管如此,如今它还是 Web 开发方面最流行的语言。
因其悠久的历史,对于实现密码哈希和数据库访问诸如此类的基本任务你能够找到很多教程。
但问题在于,5 个教程,你就很有可能找到 5 种完全不同的完成任务的方式,那么哪种是「正确」的方式呢?
其他方式有难以捉摸的 bug 或者陷阱?
确实很难搞明白,所以你经常要在互联网上反复查找尝试确认正确的答案。

这也是 PHP 编程新手频繁地因为丑陋、过时、或不安全的代码而遭到责备的原因之一。
如果 Google 搜索的第一个结果是一篇 4 年前的文章,讲述一种 5 年前的方法,那么 PHP 新手们也就很难改变经常遭受责备的现状。

本文档通过为 PHP 中常见的令人困惑的问题和任务编辑组织一系列被认为最佳实践的基本做法,
来尝试解决上述问题。
若一个低层次的任务在PHP中有多种令人困惑的实现方式,本文也会涵盖。

是什么

这是一份指南,在 PHP 程序员遇到一些常见低层次任务但不明确最佳做法(由于 PHP 可能提供了多种解决方案)之时,为其建议最佳实践。
例如:连接数据库是一个常见任务,PHP 中提供了大量可行的方案,但并不是所有的都是好的做法,因此,本文也会包含该问题。

本文包含的是一系列简短的、入门性质的方案。
涉及的示例在基本设定下就能够运行起来,你研究一下应该就能把它们变为对你有用的东西。

本文将指出一些我们认为是 PHP 中最新最好的东西。然而,这意味如果你在使用老版本的 PHP,
一些用来实现这些解决方案的特性对你并不可用。

这份文档会一直更新,我会尽我最大努力保持该文档与 PHP 的发展同步。

不是什么

本文档不是一份 PHP 教程。你应该在别处学习语言基础和语法。

它也不是一份针对 web 应用常见问题,如 cookie 存储、缓存、编程风格、文档等的指南。

它也不是一个安全指南。当本文档触碰到一些安全相关的问题时,也是希望你自己做些研究来确保你的 PHP 应用的安全问题。
你的代码造成的问题应该都是自己的过错。

该文档也并不是在主张一种特定的编程风格、模式或者框架。

也不是在主张一种特定的方式来完成高层次任务如用户注册、登录系统等。
本文档只限于 PHP 的悠久历史所造成的一些易混淆或不明确的低层次任务。

它不是一个一劳永逸的解决方案,也不是一个唯一的方案。
下面要讲述的一些方法对于你的特定场景来说也许并不是最好的,存在很多不同的方式来达到同样的目的。
特别是,高负载 web 应用也许能从更加难懂的方案中获益更多。