PHP8更新了哪些东西
PHP 8 相较于 PHP 7 进行了大量的更新,主要包括性能优化、新特性增加、语法改进以及一些弃用和移除的功能。以下是 PHP 8 的主要更新内容:
1. 性能优化
✅ JIT(Just-In-Time 编译器)
作用:PHP 8 引入了 JIT 编译器,可以将部分代码在运行时编译为机器码,提高执行速度,尤其对 计算密集型任务 有明显提升。
示例:
function fibonacci($n) { return $n <= 1 ? $n : fibonacci($n - 1) + fibonacci($n - 2); } echo fibonacci(10);
JIT 可加速此类递归计算,但对于传统 Web 开发(I/O 密集型),性能提升不明显。
2. 新语法特性
✅ 命名参数(Named Arguments)
作用:调用函数时,可以使用参数名称传参,避免记住参数顺序。
示例:
function greet($name, $greeting = "Hello") { return "$greeting, $name!"; } echo greet(name: "Tom", greeting: "Hi"); // 输出 "Hi, Tom!"
✅ match()
表达式(替代 switch
)
作用:更简洁,支持严格类型匹配,且直接返回值。
示例:
$status = 2; $message = match ($status) { 1 => 'Success', 2 => 'Processing', 3 => 'Failed', default => 'Unknown', }; echo $message; // 输出 "Processing"
✅ Nullsafe 操作符(?->
)
作用:避免
null
访问导致Fatal error
,减少if
判断。示例:
$country = $user?->address?->country; // 如果 $user 或 $address 为空,则返回 null
✅ 联合类型(Union Types)
作用:允许参数和返回值接受多个类型,提高类型安全性。
示例:
function setValue(int|float $value) { return $value * 2; }
✅ 构造器属性提升(Constructor Property Promotion)
作用:减少
class
里重复定义property
的代码。示例:
class User { public function __construct(public string $name, public int $age) {} } $user = new User("Tom", 30);
✅ mixed
类型
作用:表示参数或返回值可以是
int
、float
、string
、array
、object
、null
等任意类型。示例:
function test(mixed $value) { var_dump($value); }
✅ Stringable
接口
作用:所有实现
__toString()
的类都自动实现Stringable
接口,可用于类型约束。示例:
class User { public function __toString(): string { return "User object"; } } function printString(Stringable $str) { echo $str; } printString(new User()); // 输出 "User object"
✅ 数组解包支持字符串键
作用:
array_merge()
替代方案,支持字符串键解包。示例:
$array1 = ["a" => 1, "b" => 2]; $array2 = ["b" => 3, "c" => 4]; $result = ["x" => 0, ...$array1, ...$array2]; print_r($result); // ["x" => 0, "a" => 1, "b" => 3, "c" => 4]
✅ 增强的 get_debug_type()
作用:比
gettype()
更准确地返回变量类型。示例:
echo get_debug_type(42); // 输出 "int"
✅ 新 throw
语法
作用:
throw
现在可以作为表达式使用,而不仅仅是语句。示例:
$value = $nullableVar ?? throw new Exception("Value is null");
✅ match()
支持 default
作用:
match()
现在可以有default
选项。示例:
$result = match ($var) { 1 => "one", 2 => "two", default => "unknown", };
3. 弃用和移除的功能
❌ 移除 create_function()
替代方案:使用匿名函数(
function()
或fn()
)。示例:
// PHP 7 $func = create_function('$x', 'return $x * 2;'); // PHP 8 $func = fn($x) => $x * 2;
❌ 移除 each()
替代方案:使用
foreach()
或array_keys()
。示例:
// PHP 7 while (list($key, $value) = each($array)) {} // PHP 8 foreach ($array as $key => $value) {}
❌ 移除 implode()
反向参数
替代方案:必须使用正确的参数顺序
implode($glue, $array)
。示例:
// PHP 7 implode($array, ","); // 可行 // PHP 8 implode(",", $array); // 必须使用正确顺序
4. PHP 8.1 和 8.2 进一步改进
PHP 8.1 和 8.2 在 PHP 8 的基础上进行了进一步优化,主要增加:
- 枚举类型(Enums)
readonly
关键字array_is_list()
new in initializers
总结
版本 | 主要更新 |
---|---|
PHP 8.0 | JIT 编译器、Named Arguments、match()、Nullsafe 操作符、Union Types、构造器属性提升 |
PHP 8.1 | Fibers、Readonly、Intersection Types、Array unpacking |
PHP 8.2 | Disjunctive Normal Form Types、readonly classes、提升 mysqli |
PHP 8 的更新大大提升了性能,并增加了许多方便的语法,使代码更清晰、更易维护。如果你的项目仍在 PHP 7.x,建议尽早升级到 PHP 8!🚀
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: