PHP 版本详细变迁历史
1. PHP 1.x & 2.x (PHP/FI) (1995 - 1997)
* 发布时间: 1995年 (PHP 1.0), 1997年 (PHP 2.0 / PHP/FI)
* 核心开发者: Rasmus Lerdorf
* 主要特性:
* PHP 1.0 (Personal Home Page Tools): 最初是一组简单的 Perl 脚本,用于跟踪 Rasmus Lerdorf 的在线简历访问情况,功能非常基础。
* PHP 2.0 (PHP/FI - Forms Interpreter): 用 C 语言重写,增加了对数据库(如 mSQL)的支持和表单处理能力。开始具备构建简单动态网页的能力。
* 语法与 Perl 类似,但功能有限。
* 结束支持: 早已终止,无官方维护。
* 说明: 这是 PHP 的诞生和雏形阶段,奠定了其作为服务器端 Web 脚本语言的基础。
2. PHP 3 (1998)
* 发布时间: 1998年6月
* 核心开发者: Rasmus Lerdorf, Andi Gutmans, Zeev Suraski
* 主要特性:
* 完全重写: Andi Gutmans 和 Zeev Suraski 为了开发电子商务应用,重写了底层解析器。
* 名称变更: 正式更名为 “PHP: Hypertext Preprocessor”,体现了其更广泛的用途。
* 模块化设计: 引入了可扩展的模块化架构,方便第三方开发者编写扩展(数据库、加密、XML等)。
* 平台支持: 首次支持广泛的 Unix 和 Windows 平台。
* 语法增强: 引入了更强大、更一致的语法。
* 对象支持 (初级): 提供了非常基础的面向对象编程能力(非主流)。
* 结束支持: 早已终止,无官方维护。
* 意义: PHP 3 是 PHP 真正流行起来的起点,模块化设计是其成功的关键,吸引了大量开发者。
3. PHP 4 (2000)
* 发布时间: 2000年5月
* 核心引擎: Zend Engine 1.0 (由 Zeev Suraski 和 Andi Gutmans 开发,Zend 名称来源于两人名字组合)
* 主要特性:
* 性能提升: Zend Engine 带来了显著的性能改进。
* Web 特性增强:
* HTTP Sessions 支持 (session_start()
, $_SESSION
)。
* 输出缓冲 (ob_start()
, ob_flush()
)。
* 更强大的 HTTP 协议支持。
* 新语言特性:
* foreach
循环语法改进。
* 引入引用 (&
)。
* 布尔类型 TRUE
/FALSE
常量。
* 扩展增强: 标准库扩展大量增加并改进。
* 安全性改进: 引入了 open_basedir
, safe_mode
(虽然后来证明问题多) 等安全相关的配置选项。
* 结束支持: PHP 4.4.9 是最终版本,官方支持于 2008年8月8日 终止。
* 说明: PHP 4 是 PHP 成为主流 Web 开发语言的标志性版本,统治了 Web 开发领域多年。但其对象模型是“对象变量”而非真正的对象引用,存在根本缺陷。
4. PHP 5 (2004)
* 发布时间: 2004年7月 (PHP 5.0)
* 核心引擎: Zend Engine 2.0
* 主要特性 (划时代变革 - 面向对象):
* 全新的对象模型 (OOP):
* 对象通过句柄(Handle)传递,实现真正的面向对象引用。
* 完整的访问控制修饰符: public
, protected
, private
。
* 抽象类 (abstract
) 和接口 (interface
)。
* 析构函数 (__destruct()
)。
* 对象克隆 (__clone()
)。
* 异常处理 (try
, catch
, throw
)。
* PDO (PHP Data Objects): 轻量级、一致性的数据库访问抽象层,支持多种数据库。
* XML 增强: 集成了更强大的 XML 支持 (SimpleXML, DOM, XSLT)。
* SOAP 扩展: 支持 Web Services。
* SQLite 集成: 内置轻量级数据库引擎。
* 迭代器 (Iterator) 和 SPL: 提供了更强大的对象遍历和标准数据结构接口。
* 重要子版本更新:
* PHP 5.1 (2005): PDO 成为默认扩展,性能改进。
* PHP 5.2 (2006): JSON 支持 (json_encode
, json_decode
),Filter 扩展,时区处理改进。
* PHP 5.3 (2009 - 重大更新):
* 命名空间 (Namespaces): 解决代码命名冲突的核心机制。
* 延迟静态绑定 (static::
): 允许在继承范围内引用静态调用的类。
* 闭包 / Lambda / 匿名函数: (function(...) use (...) { ... }
)。
* 跳转标签 (goto
): (需谨慎使用)。
* NOWDOC / HEREDOC 改进: 支持静态解析。
* PHP 归档 (Phar): 将 PHP 应用打包成单个文件。
* MySQLnd (MySQL Native Driver): 替代 libmysql
的纯 PHP 驱动 (性能更好,内存占用更少)。
* PHP 5.4 (2012):
* 内置 Web 服务器: php -S localhost:8000
。
* Traits: 代码复用机制,解决单继承限制。
* 短数组语法: []
替代 array()
。
* 函数返回数组解引用: foo()[0]
。
* 二进制直接量: 0b1101
。
* $_SESSION
上传进度支持。
* 移除了 register_globals
, magic_quotes
, safe_mode
等不安全的遗留特性。
* PHP 5.5 (2013):
* 生成器 (yield
) 和协程: 简化迭代器创建,支持轻量级协程。
* finally
关键字: 异常处理的清理块。
* foreach
支持 list()
: foreach ($array as list($a, $b))
。
* empty()
支持表达式: empty($foo->bar)
。
* 密码哈希 API: password_hash()
, password_verify()
(安全存储密码的推荐方式)。
* 常量引用 ClassName::class
: 获取类的完全限定名称。
* PHP 5.6 (2014):
* 常量标量表达式: const TWO = ONE * 2;
。
* 变长参数 (...
) 和参数解包 (...$args
): function sum(...$numbers)
。
* **
幂运算符: 2 ** 3 = 8
。
* use function
和 use const
: 导入函数和常量。
* __debugInfo()
魔术方法: 控制 var_dump()
输出。
* GMP 运算符重载: 使 GMP 数学操作更直观。
* phpdbg
: 内置的交互式调试器。
* 结束支持: PHP 5.6 是 5.x 系列的最终版本,其官方安全支持于 2018年12月31日 终止。强烈建议不再使用任何 PHP 5.x 版本!
* 说明: PHP 5 确立了 PHP 作为现代编程语言的地位,尤其是强大的 OOP 支持使其能够构建大型复杂应用。5.3 和 5.4 是里程碑式的子版本。
5. PHP 7 (2015)
* 发布时间: 2015年12月 (PHP 7.0) - 跳过了计划中的 PHP 6 (Unicode 重写失败的项目)
* 核心引擎: Zend Engine 3.0
* 主要特性 (性能革命):
* 性能飞跃: 平均比 PHP 5.6 快 2 倍以上,大幅降低服务器资源消耗。这是升级的最大动力。
* 标量类型声明: function sum(int $a, int $b): int { ... }
(支持 int
, float
, string
, bool
)。
* 返回类型声明: function getName(): string { ... }
。
* 空合并运算符 (??
): $username = $_GET['user'] ?? 'nobody';
(简化 null 值检查)。
* 太空船运算符 (<=>
): $a <=> $b
(用于比较和排序)。
* 匿名类: new class { ... }
(用于一次性实现接口或扩展类)。
* Unicode 码点转义语法: "\u{1F602}"
(😂)。
* Closure::call()
: 更高效地临时绑定闭包到对象并调用。
* 过滤的 unserialize()
: 提高反序列化安全性。
* 预期 (assert
) 增强: 支持预期异常。
* use
分组声明: use Some\Namespace\{ClassA, ClassB, ClassC as C};
。
* 生成器委托 (yield from
): 简化生成器嵌套。
* 整数除法函数: intdiv()
。
* 移除大量过时扩展和 SAPIs: 如 mysql
扩展 (强制使用 mysqli
或 PDO), ereg
扩展 (强制使用 preg
)。
* 重要子版本更新:
* PHP 7.1 (2016):
* 可为空 (Nullable) 类型: ?Type
表示参数或返回值可以是 Type
或 null
。
* void
返回类型: 表示函数不返回任何值。
* 类常量可见性: public
, protected
, private
。
* 可迭代的伪类型: iterable
(表示 array
或 Traversable
)。
* 多异常捕获: catch (ExcType1 | ExcType2 $e)
。
* list()
支持键名: list('id' => $id, 'name' => $name) = $data;
。
* 负字符串偏移支持: $str[-1]
。
* PHP 7.2 (2017):
* object
类型: 参数/返回值可以声明为 object
。
* 通过 count()
参数类型: 必须是 Countable
| array
。
* 扩展的 password_hash()
算法: Argon2。
* sodium
扩展 (核心): 现代密码学库。
* Libsodium
成为核心扩展。
* 弃用 __autoload()
: 强制使用 spl_autoload_register()
。
* 弃用不带括号的 create_function()
: 鼓励使用匿名函数。
* PHP 7.3 (2018):
* 灵活的 Heredoc/Nowdoc 结束标记: 允许缩进,结束标记不再需要单独一行。
* array_key_first()
, array_key_last()
: 获取数组的首/尾键名。
* is_countable()
: 检查变量是否可被 count()
。
* gc_mem_caches()
: 强制回收垃圾收集器内存缓存。
* PCRE2 迁移: 使用更新的正则表达式库。
* JSON 错误处理改进: JSON_THROW_ON_ERROR
选项。
* 弃用大小写不敏感的常量: 影响 TRUE
/FALSE
/NULL
。
* 在 compact()
中未定义变量抛出 Notice。
* PHP 7.4 (2019):
* 箭头函数 (fn() => ...
): 更简洁的匿名函数语法。
* 类型属性: public int $id;
(类属性支持类型声明)。
* 预加载 (Opcache Preloading): 显著提升框架驱动的应用性能 (需配合 Opcache)。
* 弱引用 (WeakReference): 允许引用对象而不阻止其被垃圾回收。
* 协变返回和逆变参数: 放宽子类方法重写时的类型规则。
* 数组解包操作符扩展 (...
): 支持数字键数组 ($arr = [...$arr1, ...$arr2];
)。
* __serialize()
/ __unserialize()
魔术方法: 替代 __sleep()
/__wakeup()
用于更可控的序列化。
* mb_str_split()
: 按字符数分割多字节字符串。
* strip_tags()
支持数组标签名。
* 三元运算符弃用左结合性: 1 ? 2 : 3 ? 4 : 5
行为改变(需加括号)。
* 移除 php.ini
中的 filter.default
指令。
* 结束支持:
* PHP 7.0: 2018年12月3日
* PHP 7.1: 2019年12月1日
* PHP 7.2: 2020年11月30日
* PHP 7.3: 2021年12月6日
* PHP 7.4: 2022年11月28日 (当前已结束支持)
* 说明: PHP 7 是性能的里程碑,同时引入了重要的现代语言特性(类型声明、新运算符等),巩固了 PHP 在现代 Web 开发中的地位。7.4 是 7.x 的最后一个重要版本。
6. PHP 8 (2020)
* 发布时间: 2020年11月 (PHP 8.0)
* 核心引擎: Zend Engine 持续优化 (JIT 是核心特性)
* 主要特性 (现代化与性能再进化):
* JIT (Just-In-Time) 编译器: 在特定 CPU 密集型工作负载下带来显著性能提升 (如数学计算、游戏)。
* 联合类型 (Union Types): string|int
(表示参数/返回值可以是多种类型之一)。
* match
表达式: 更强大、简洁、严格的 switch
替代品 ($result = match($statusCode) { 200 => 'OK', 404 => 'Not Found', default => 'Unknown' }
)。
* 命名参数: htmlspecialchars($string, double_encode: false)
(提高可读性,允许跳过可选参数)。
* 构造器属性提升 (Constructor Property Promotion): 简化类构造函数的写法 (class Point { public function __construct(public float $x, public float $y) {} }
)。
* static
返回类型: 允许在继承链中返回 $this
的类型。
* mixed
伪类型: 显式表示任意类型。
* throw
表达式: $nullableValue ?? throw new InvalidArgumentException();
(可在表达式上下文中抛出异常)。
* WeakMap
: 一种特殊的 Map,其键不会阻止对象被垃圾回收。
* Stringable
接口: 自动实现于定义了 __toString()
方法的类。
* str_contains()
, str_starts_with()
, str_ends_with()
: 常用字符串操作的专用函数。
* get_debug_type()
: 比 gettype()
返回更详细的类型信息。
* Nullsafe 操作符 (?->
): $country = $session?->user?->getAddress()?->country;
(链式调用中遇到 null 则短路返回 null)。
* 属性 (Attributes): #[Route("/api/posts")]
(结构化元数据的原生语法,替代或补充 Doc Comments)。
* 一致的类型错误: 类型错误时抛出 TypeError
异常。
* 移除大量过时功能: 如 create_function()
, real
类型别名等。
* 重要子版本更新:
* PHP 8.1 (2021):
* 枚举 (Enums): 第一方支持的枚举类型 (enum Status { case Draft; case Published; }
)。
* readonly
属性: 属性只能在初始化时赋值一次 (public readonly string $id;
)。
* 纤程 (Fibers): 提供轻量级、无堆栈的并发原语,用于实现异步 I/O 和绿色线程/协程库。
* never
返回类型: 表示函数永不返回 (总是抛出异常或退出)。
* Final 类常量: final public const VERSION = '1.0';
。
* 新的 array_is_list($array)
函数。
* 新的 fsync
/fdatasync
函数。
* 显式八进制数字表示法 (0o16
) 。
* $_FILES
中的新条目: full_path
(保留上传文件时的目录结构)。
* PHP 8.2 (2022):
* 只读类 (readonly class
): 所有属性都是 readonly
。
* null
和 false
作为独立类型: return null;
, return false;
(联合类型中更精确)。
* 析取范式 (DNF) 类型: (A&B)|C
(组合联合类型和交集类型)。
* mysqli_execute_query()
和 mysqli::execute_query()
: 简化带参数绑定的查询执行。
* #[\SensitiveParameter]
属性: 标记敏感参数 (如密码),在堆栈跟踪中隐藏其值。
* curl_upkeep
函数: 维护 Curl 连接活性。
* Random
扩展: 新的现代随机数生成器接口。
* 动态属性弃用: 给未声明的属性赋值会发出弃用警告 (除非类用 #[\AllowDynamicProperties]
标记)。准备在 PHP 9 中移除。
* 移除 utf8_encode()
/utf8_decode()
: 改用 mb_convert_encoding
。
* PHP 8.3 (2023年11月):
* 类常量显式类型: public const string VERSION = '8.3';
。
* 只读属性深拷贝: __clone
方法中现在可以修改只读属性的值 (用于深拷贝场景)。
* json_validate()
: 快速、低内存消耗地验证 JSON 字符串是否有效。
* Randomizer
新增方法: getBytesFromString()
, getFloat()
, nextFloat()
。
* mb_str_pad()
: 多字节安全的字符串填充。
* #[\Override]
属性: 显式标记方法意图是覆盖父类方法,编译器会检查。
* 动态获取类常量/枚举成员: $constantName = 'CONSTANT'; $value = MyClass::{$constantName};
。
* gc_status()
增强: 提供更多垃圾收集器状态信息。
* 命令行 --ini
选项增强: 显示更多配置信息。
* 改进 unserialize()
错误处理: E_NOTICE
-> E_WARNING
。
* 结束支持 (预计):
* PHP 8.0: 2023年11月26日 (已结束)
* PHP 8.1: 2024年11月25日 (即将结束)
* PHP 8.2: 2025年12月8日
* PHP 8.3: 2026年11月23日
* 说明: PHP 8 是语言现代化进程的重大飞跃,引入了 JIT、联合类型、枚举、match
、属性、只读属性/类等革命性特性,同时继续提升性能、类型安全性和开发体验。强烈建议新项目使用 PHP 8.x (至少 8.1+),旧项目积极规划升级。
7. 未来展望 (PHP 8.4+)
* PHP 8.4: 预计于 2024年11月 发布。重点可能包括:
* 进一步优化 JIT 性能和应用场景。
* 类型系统持续增强 (如 typed
常量表达式)。
* 清理遗留代码和不一致行为。
* 新的便利特性(如更简洁的对象字面量构造提案)。
* PHP 9: 处于早期规划阶段。主要目标可能是:
* 移除 PHP 8.x 中已弃用的遗留功能(最显著的是动态属性)。
* 更彻底的内部清理和现代化。
* 可能引入更大胆的语言特性变更。
* 发布时间尚未确定。
总结与建议:
-
历史版本 (PHP 5.6及以下, PHP 7.4及以下): 已结束安全支持! 存在严重安全风险,必须立即升级。
-
PHP 8.0: 已结束支持,不再接收安全更新。
-
PHP 8.1: 当前活跃支持中,但将于 2024年11月结束。 如果正在使用,应开始规划升级到 8.2 或 8.3。
-
PHP 8.2: 当前活跃支持中 (安全支持至 2025年12月)。 稳定且特性丰富,是当前推荐的稳定版本之一。
-
PHP 8.3: 最新稳定版本 (安全支持至 2026年11月)。 包含最新特性和改进,是新项目和积极维护项目的最推荐起点。