PHP 简介
PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源通用脚本语言。它尤其适用于 Web 开发,并且可以嵌入到 HTML 中。
本章将向你介绍 PHP 作为服务器端(Server-side)脚本语言的身份,对比它与客户端脚本的区别,并解释它在动态网页生成中扮演的角色。
1. 理解服务器端脚本
服务器端脚本是指在 Web 服务器上运行的程序,而不是在用户的浏览器(客户端)中运行。
当用户请求一个网页时,服务器会处理脚本,生成 HTML 响应,然后将该 HTML 发送给浏览器。浏览器接收到的只是静态的 HTML、CSS 和 JavaScript,而永远看不到服务器端脚本本身。这种架构实现了动态内容、数据库交互以及对客户端不可见的安全性操作。
1.1 现实世界中的例子:个性化体验
想象一下一个显示个性化内容的网站,比如在欢迎词中显示你的名字,或者显示你的近期订单列表。这种个性化就是由服务器端脚本处理的。
- 亚马逊 (Amazon) 的例子:当你访问 Amazon 时,服务器会处理你的登录状态,从数据库中提取你的历史购买记录,并在发送到你浏览器之前,为你量身定制一个唯一的页面。你永远看不到抓取订单记录的底层逻辑代码,你看到的只是最终渲染好的 HTML。
- 在线银行门户:当你登录时,服务器端脚本会根据数据库验证你的凭据,获取账户余额,并动态生成一个显示你财务信息的安全页面。这个过程的安全性在于敏感逻辑和数据库密码始终保留在服务器上,防止客户端窥探。
1.2 假设场景:公司内部员工门户
假设有一个内部门户,员工可以查看剩余假期。
- 员工登录。
- 服务器上的 PHP 脚本查询人力资源(HR)数据库。
- 获取该员工剩余的假期天数。
- 生成一个以友好格式显示这些信息的 HTML 页面。
- 在页面发送给员工浏览器之前,脚本甚至可以检查公司政策以判断员工是否有资格申请更多假期。
2. PHP 作为服务器端语言的角色
PHP 之所以能成为优秀的服务器端脚本语言,是因为它与 Web 服务器和数据库有着天然的集成能力。它的工作方式是解释嵌入在 HTML 文件或专用 PHP 文件中的代码。
2.1 PHP 的工作流程
当浏览器请求一个以 .php 结尾的文件时:
- Web 服务器(如 Apache 或 Nginx)将请求传递给 PHP 解释器。
- 解释器扫描文件,执行它找到的所有 PHP 代码。
- 解释器将代码的输出结果与静态 HTML 结合。
- 这个结合后的产物(现在是一个纯 HTML 文档)被服务器发回给浏览器的客户端。
2.2 动态内容的生成
- 博客文章:文章的标题、内容、作者和发布日期通常存储在数据库中。PHP 脚本会查询数据库,提取相关信息,然后将其动态插入到 HTML 模板中。这样你就不需要为每一篇新文章手动编写 HTML 文件。
- 动态图片库:与其在 HTML 中硬编码每一个
<img>标签,PHP 脚本可以读取文件夹或数据库中的图片文件名,自动循环生成必要的标签。
3. PHP 在现代 Web 开发中的地位
在当今的开发环境中,PHP 依然是一门强大且应用广泛的语言,支撑着互联网的很大一部分。
- 内容管理系统 (CMS):它是 WordPress、Drupal 和 Joomla 等流行系统的基石,这些系统驱动着全球数百万计的网站。
- Web 应用与电商:PHP 被用于各种 Web 应用和电商平台(如 Magento,以及 Laravel 与支付网关的集成)。
- 现代框架:PHP 持续演进,引入了支持面向对象编程(OOP)的特性,并孕育了 Laravel、Symfony 和 CodeIgniter 等现代框架,使其在当前的大型开发项目中极具竞争力。
4. PHP 发展史
| 年份 | 版本 | 核心里程碑与特性 |
|---|---|---|
| 1994 | PHP Tools (起源) | Rasmus Lerdorf 编写的 CGI 工具,最初仅用于追踪他个人简历的访问者。 |
| 1995 | PHP/FI 2.0 | 结合了 Form Interpreter,开始具备类似 Perl 的变量、表单处理及嵌入 HTML 的能力。 |
| 1998 | PHP 3.0 | 现代 PHP 的雏形。底层解析器被重写,正式确立递归缩写名 PHP: Hypertext Preprocessor。 |
| 2000 | PHP 4.0 | 搭载全新的 Zend Engine 1.0。引入 Session、输出缓冲及初步的面向对象 (OOP) 支持。 |
| 2004 | PHP 5.0 | 搭载 Zend Engine II,向企业级迈进。引入完善的 OOP 模型、异常处理及极其重要的 PDO。 |
| 2005 - 2010 | PHP 6 (未发布) | 因尝试在底层原生支持 Unicode (UTF-16) 导致性能下降而流产。其优秀特性被合入 PHP 5.x。 |
| 2015 | PHP 7.0 | 搭载 Zend Engine 3.0,性能实现翻倍。引入标量/返回值类型声明、太空船操作符及 Null 合并。 |
| 2020 | PHP 8.0 | 现代化新篇章。引入 JIT 编译器、联合类型、命名参数、Match 表达式、Nullsafe 操作符及注解。 |
| 2021 - 2023 | PHP 8.1 - 8.3 | 持续优化现代开发体验。引入枚举 (Enums)、只读属性/类、交集类型及析取范式类型。 |
| 2024 | PHP 8.4 | 引入属性钩子 (Property Hooks)、不对称可见性以简化样板代码,并内置全新 HTML5 解析器。 |
| 2025 | PHP 8.5 | 引入管道操作符使链式调用更直观,新增 #[NoDiscard] 注解,原生内置数组首尾获取函数。 |