PHP 8.2 新特性之 Readonly Class (只读类)
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 的使用,我们一切发掘。
请登录后再评论