readonly
现在在 PHP 8.1 中可用,我只是想知道它有什么用?这是为了帮助编辑知道这个属性是公正readonly
的还是帮助客户知道或者还有其他好处?
问问题
190 次
1 回答
5
readonly
properties 允许您创建不可变的对象,或者至少是不可变的属性。
这样,您可以确保在对象的整个生命周期内初始化后不会意外更改值。
这是一个与常量(通过const
or设置define
)非常相似的概念,尽管有两个重要区别:
- 常量需要在“编译”时定义,而
readonly
属性将在运行时设置,通常是在对象实例化期间(因此多个实例将能够保存不同的值*) - 与存在于全局范围内的常量相反,对于类常量,它们的值与类而不是实例相关联。
您可以使用只能通过 getter 访问的私有属性来实现相同的目的。例如,在“过去”:
class Foo {
private DateTimeImmutable $createAt;
public function __construct() {
$this->createdAt = new DateTimeImmutable();
}
public getCreatedAt(): DateTimeImmutable
{
return $this->createdAt;
}
}
$f = new Foo();
echo $f->getCreatedAt()->format('Y-m-d H:i:s');
唯一的问题是它需要大量的样板代码。
使用 PHP 8.1。同样可以通过以下方式实现:
class Foo
{
public function __construct(
public readonly DateTimeImmutable $createdAt = new DateTimeImmutable()
)
{ }
}
$f = new Foo();
echo $f->createdAt->format('Y-m-d H:i:s')
于 2021-12-06T12:54:38.630 回答