QQ扫一扫联系
PHP 8 是一次重大更新,带来了性能提升、新特性、语法改进及部分功能弃用。以下是核心更新内容,按模块分类整理:
技术突破:引入 Tracing JIT 编译器,将热点代码编译为机器码,执行速度提升 1.5~3 倍(尤其对计算密集型任务)。
示例对比:
// PHP 7 递归计算斐波那契数列 function fibonacci($n) { return $n <= 1 ? $n : fibonacci($n-1) + fibonacci($n-2); } echo fibonacci(30); // 耗时约 1 秒 // PHP 8 开启 JIT 后 opcache.jit_buffer_size=64M // php.ini 配置 // 相同代码执行时间缩短至 0.3 秒
命名参数(Named Arguments)
function createUser($name, $age = 18, $role = 'guest') {} // PHP 7 调用需记住顺序 createUser('Alice', 25, 'admin'); // PHP 8 可显式命名 createUser(name: 'Alice', age: 25, role: 'admin');
联合类型(Union Types)
function processData(int|float $value): string|null {}
属性(Attributes)
// 定义路由属性 #[Route("/api/users")] class UserController { #[RateLimit(requests: 100, minutes: 60)] public function index() {} }
构造器属性提升
class User { public function __construct( public string $name, public int $age, private string $token = 'default' ) {} }
Nullsafe 运算符
// PHP 7 需多层判空 $country = $user && $user->address ? $user->address->country : null; // PHP 8 简化 $country = $user?->address?->country;
Match 表达式
$result = match($statusCode) { 200 => 'OK', 404 => 'Not Found', default => 'Unknown', };
静态返回类型
class Factory { public static function create(): static {} // 返回调用类的实例 }
混合类型(mixed)
function parseJSON(mixed $input): mixed {}
Stringable 接口
class UUID implements Stringable { public function __toString(): string { return $this->value; } } function logID(Stringable $id) { echo $id; } logID(new UUID());
Throwable 接口统一异常
try { // 可能抛出 Error 或 Exception } catch (Throwable $e) { logError($e->getMessage()); }
精准错误类型
try { $value = $array['non_existent_key']; } catch (Error $e) { echo "访问未定义键: " . $e->getMessage(); }
| 弃用功能 | 替代方案 | 影响场景 |
|-------------------|----------------------------|--------------------------|
| create_function
| 匿名函数 fn()
| 动态生成函数 |
| each()
| foreach()
| 遍历数组
|
| implode($array)
| implode(',', $array)
| 字符串拼接 |
| assert()
| 移除或改用异常 | 断言验证 |
字符串函数增强
str_contains('hello', 'ell'); // true str_starts_with('https://example.com', 'https'); // true
弱映射(WeakMap)
$map = new WeakMap(); $obj = new stdClass(); $map[$obj] = 'metadata'; // $obj 被销毁时,相关条目自动清理
JSON 扩展核心化
// PHP 7 需安装扩展 $data = json_decode($jsonString); // PHP 8 直接可用
枚举类型(Enums)
enum Status { case Draft; case Published; case Archived; }
只读属性(readonly)
class Config { public readonly string $apiKey; public function __construct(string $apiKey) { $this->apiKey = $apiKey; } }
数组函数 array_is_list()
$list = [1, 2, 3]; var_dump(array_is_list($list)); // true
兼容性检查:使用 php -l
进行语法检查,关注弃用警告。
性能测试:对计算密集型代码启用 JIT(需配置 opcache.jit=1235
)。
类型标注:逐步添加联合类型和属性,提升代码可维护性。
PHP 8 通过 JIT、类型系统和语法改进,显著提升了开发效率和运行性能,是值得升级的重要版本。