PHP 8.2 只读类:编写更安全、更简洁的代码
在PHP 8.2中,“只读类”的引入是一个令人兴奋的特性,它极大地简化了不可变对象的创建。
过去,我们需要为类的每个属性单独添加readonly修饰符:
class User {
public readonly string $name;
public readonly string $email;
public function __construct(string $name, string $email) {
$this->name = $name;
$this->email = $email;
}
}
现在,只需在类声明前添加readonly即可:
readonly class User {
public string $name;
public string $email;
public function __construct(string $name, string $email) {
$this->name = $name;
$this->email = $email;
}
}
这个简单的改变带来了多重好处:
- 安全性增强:确保对象状态在初始化后不会被意外修改
- 代码更简洁:减少样板代码,提高可读性
- 意图更明确:清晰传达“这是一个不可变对象”的设计意图
只读类特别适合值对象、DTO和领域实体,能有效减少因状态变化引起的bug。不过需要注意,只读类中的所有属性都必须是只读的,且不能包含静态属性。
这一特性是PHP向更严格的类型系统和更好的代码质量迈出的重要一步。随着PHP类型系统的持续增强,编写健壮、可维护的应用程序变得越来越简单。
开始尝试只读类,你会发现它能让你的代码更加安全、清晰。