PHP 中的只读类(Readonly Classes)用法讲解

作者:小鱼同学 2025-03-24 18:57:36 PC 评论:0 热度:0

PHP 8.2引入了readonly类的概念,这是一种创建不可变(immutable)对象的方式。

基本概念

只读类是指类的所有属性都是只读的,即在初始化后不能被修改。

readonly class User {
    public string $name;
    public int $age;
    
    public function __construct(string $name, int $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

主要特点

  1. 所有属性自动变为只读:类中的所有属性都隐式成为readonly属性

  2. 必须在构造函数中初始化:所有属性必须在构造时赋值

  3. 不能有可变属性:不能在只读类中声明非只读属性

使用示例

// 创建只读类实例
$user = new User('张三', 25);

// 可以读取属性
echo $user->name; // 输出: 张三

// 但不能修改属性
$user->name = '李四'; // 错误: 不能修改只读属性

使用场景

  1. 值对象(Value Objects):如日期、货币等不应改变的对象

  2. 数据传输对象(DTOs):在不同层之间传递数据

  3. 配置对象:初始化后不应更改的配置

注意事项

  1. 只读类只能包含只读属性

  2. 不能动态添加属性

  3. 只读类可以继承其他类,但父类不能是非只读类

  4. 只读类可以被继承,但子类也必须是只读的

与只读属性的区别

PHP 8.1引入了只读属性,而PHP 8.2扩展了这一概念到整个类:

// PHP 8.1 只读属性
class User {
    public readonly string $name;
    public readonly int $age;
    
    // ...
}

// PHP 8.2 只读类(等同于所有属性都是只读的)
readonly class User {
    public string $name;
    public int $age;
    
    // ...
}

THE END
喜欢 0 收藏 0 打赏 0 送礼 0 海报 分享 举报
0成员 13内容
最新 最热 神评 只看作者

    暂无评论