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、类型系统和语法改进,显著提升了开发效率和运行性能,是值得升级的重要版本。