PHP 8.2 新特性之 Readonly Class (只读类)

作者: 温新

分类: 【PHP基础】

阅读: 1618

时间: 2023-02-20 13:42:12

hi,我是温新,一名 PHPer

PHP 8.1 添加了只读属性,只读属性只能设置一次。

PHP 8.2 对只读属性做了一次升级,那就是声明 Readonly Class。一个类一旦被设置为只读类,那么这个类中的属性都是只读属性。

PHP8.2

1、基础使用

只读类使用关键字 readonly 标记。

<?php

// 只读类
readonly class WebSite
{
    public function __construct(public string $webName = '', public string $webUrl = '')
    {
    }
}
$webSite = new WebSite('自如初', 'www.ziruchu.com');

若对只读属性赋值,则会报错,如下:

// 为只读属性赋值,会报错
$webName->webName = 'PHP';
// 报错信息如下
PHP Fatal error:  Uncaught Error: Attempt to assign property "webName" on null in

2、 只读抽象类与继承

<?php
    
readonly abstract class Animal
{
    public string $name;
}

readonly class Cat extends Animal
{
    public function __construct(public string $name)
    {
    }

    public function getName()
    {
        echo $this->name;
    }
}

$cat = new Cat('花花');
$cat->getName();

3、关于接口

错误案例

<?php
// 错误,接口不能设置为 readonly
readonly interface Animal
{
    public function getName();
}

正确案例

interface Animal
{
    public function getName();
}

 class Dog implements Animal
{
    public function __construct(public string $name)
    {
    }

    public function getName()
    {
        echo $this->name;
    }
}

$dog = new Dog('旺财');
$dog->getName();

readonly class 特性:

  • 只读属性只能进行第一次赋值,再次赋值则会报错;
  • 抽象类可以设置为只读类;
  • 接口不能设置为只读类,但其实现者可以设置为只读类;
  • trait 不能设置为只读类

关于 PHP 8.2 Readonly Class 的使用,我们一切发掘。

请登录后再评论