PHP 8.0 新特性

PHP 8.0 有哪些重磅更新

PHP 8.0 是一个大版本更新,带来了很多革命性的特性。

1. JIT 编译

PHP 8.0 引入了 JIT(即时编译),性能大幅提升,计算密集型场景性能翻倍。

2. 命名参数

array_filter(array: $array, callback: fn($x) => $x > 0);

不用按顺序传参,写参数名就行,可读性更好。

3. 枚举 Enum

enum Status: string
{
    case Pending = 'pending';
    case Active = 'active';
    case Rejected = 'rejected';
}

4. 构造函数属性提升

class User {
    public function __construct(
        public int $id,
        public string $name
    ) {}
}

不用再写 $this->id = $id 了,构造函数直接定义属性。

5. 空安全运算符

$user?->getAddress()?->city;

不用层层判断 null,有 null 直接返回 null。

6. Match 表达式

$result = match($status) {
    200 => '成功',
    404 => '未找到',
    default => '未知'
};

比 switch 更简洁,还能直接赋值。

7. 联合类型

function foo(int|string $input) {}

参数可以是多种类型。

总结

PHP 8.0 是现代 PHP 的起点,类型系统更完善,语法更现代。新项目强烈推荐用 PHP 8.0+。


emer 发布于  2026-10-4 10:34 

MySQL 8.0 新特性

MySQL 8.0 有哪些重要更新

MySQL 8.0 是目前最主流的大版本,相比 5.7 提升很大。

1. 性能提升

8.0 的性能比 5.7 提升约 2 倍,尤其是读取和写入并发场景下提升明显。

2. 原子 DDL

8.0 支持原子 DDL,建表、删表操作要么全成功要么全失败,不会出现一半成功一半失败的情况。

3. 窗口函数

支持窗口函数,比如 ROW_NUMBER()、RANK(),做排名统计很方便:

SELECT name, score,
  RANK() OVER (ORDER BY score DESC) as rank
FROM students;

4. CTE 公共表表达式

支持 WITH 语法,复杂 SQL 写起来更清晰:

WITH top_users AS (
  SELECT id, name FROM users WHERE vip = 1
)
SELECT * FROM top_users;

5. JSON 增强

JSON 操作函数更丰富,性能也更好,基本可以替代 MongoDB 的简单场景。

6. 隐藏索引

可以把索引设为隐藏状态,不删除但暂时不用,用来测试索引是否真的有用。

7. 字符集变化

默认字符集从 latin1 改成了 utf8mb4,支持 Emoji 表情。

总结

MySQL 8.0 是目前新项目的首选,性能好、特性全。老项目从 5.7 升级要注意兼容性,尤其是 SQL 模式和函数变化。


emer 发布于  2026-10-4 10:28 

PHP 7.4 新特性

PHP 7.4 有哪些实用新特性

PHP 7.4 是 7.x 系列的最后一个版本,带来了不少语法糖和性能优化,至今还有很多项目在用。

1. 类型属性

类的属性可以声明类型了:

class User {
    public int $id;
    public string $name;
    public ?string $email;
}

之前属性不能写类型,只能靠 PHPDoc 注释,现在直接写在代码里,IDE 提示更准确。

2. 箭头函数

支持短闭包:

$users = array_map(fn($user) => $user['name'], $users);

比传统的 function ($user) use (...) {} 简洁多了,自动捕获外层变量。

3. 空合并赋值

$data['user'] ??= [];

相当于:

if (!isset($data['user'])) {
    $data['user'] = [];
}

4. 数组展开

$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$merged = [...$arr1, ...$arr2];

5. 数字字面量分隔

$amount = 1_000_000;
$price = 9_999.99;

大数字用下划线分隔,可读性提升。

6. 性能提升

PHP 7.4 比 7.3 性能提升约 10%,内存占用也更少。

总结

PHP 7.4 虽然不是大版本,但实用特性很多,尤其是类型属性和箭头函数,写起来舒服不少。新项目建议直接上 PHP 8+,老项目升级到 7.4 也很稳妥。


emer 发布于  2026-10-4 10:27 

PHP 8.3 新特性详解:类型类获取、动态常量获取和更多实用功能

前言

PHP 8.3 于 2023 年 11 月正式发布,作为 PHP 8.x 系列的第四个版本,它带来了一系列实用的语法增强和性能优化。本文将深入介绍 PHP 8.3 中最值得关注的几个新特性。

1. 类型类获取(Typed class constants)

在 PHP 8.3 之前,类常量无法声明类型。从 PHP 8.3 开始,类常量可以指定类型,这有助于提高代码的类型安全性。

class Foo
{
    const string BAR = 'bar';
    const int MAX_COUNT = 100;
}

声明了类型的常量必须与声明的类型匹配,否则会抛出 TypeError。支持的类型包括:标量类型、array、object、static、self、parent、类名/接口名以及 iterable。

2. 动态类常量获取

PHP 8.3 新增了 constant() 函数的增强,允许通过表达式动态获取类常量:

class Status
{
    const DRAFT = 'draft';
    const PUBLISHED = 'published';
    const ARCHIVED = 'archived';
}

$status = 'PUBLISHED';
echo constant(Status::class . "::$status"); // 输出: published

这在需要根据变量动态选择常量时非常有用,避免了大量的 switch 或 match 分支。

3. #[\Override] 注解

PHP 8.3 引入了 #[\Override] 注解,用于显式标记一个方法是重写父类的方法:

abstract class Controller
{
    abstract public function handle(): void;
}

class UserController extends Controller
{
    #[\Override]
    public function handle(): void
    {
        echo "Handling user request...";
    }
}

如果使用了 #[\Override] 注解,但方法实际上并没有重写任何父类方法(比如方法名拼错了),PHP 会在编译时报错。这在大型项目中非常有价值,可以防止因为方法名不一致导致的隐蔽 bug。

4. Readonly 深拷贝

PHP 8.3 改进了 readonly 属性的处理。在 PHP 8.2 中,readonly 属性不能通过克隆来修改。PHP 8.3 允许在克隆时修改 readonly 属性:

class Point
{
    public function __construct(
        public readonly int $x,
        public readonly int $y
    ) {}
}

$p1 = new Point(10, 20);
$p2 = clone $p1;
$p2->x = 30; // PHP 8.3 中允许,PHP 8.2 会报错

这个特性在值对象模式中特别有用,可以创建修改后的副本而不影响原始对象。

5. 其他实用改进

json_validate() 函数

PHP 8.3 新增了 json_validate() 函数,用于验证 JSON 字符串是否有效,而不需要解码:

$json = '{"name": "Alice", "age": 30}';
if (json_validate($json)) {
    echo "Valid JSON";
}

这比 json_decode() 更高效,因为它不需要分配内存来存储解码后的结果。

随机浮点数

PHP 8.3 的 Random\Randomizer 类新增了 getFloat() 方法:

$r = new Random\Randomizer();
$float = $r->getFloat(0, 10, \Random\IntervalBoundary::ClosedOpen);

总结

PHP 8.3 虽然不是一个大版本更新,但它带来的每一个新特性都直击开发者的日常痛点。类型类常量和 #[\Override] 注解增强了代码的可维护性,动态常量获取简化了代码逻辑,readonly 深拷贝则让值对象模式更加实用。

建议正在使用 PHP 8.x 的项目尽快升级到 8.3,既能获得这些新特性的好处,也能享受性能上的小幅提升。


emer 发布于  2026-10-4 09:48