readonly现在在PHP8.1中可用,我只是想知道它的用途是什么?这是为了帮助编辑器知道这个属性仅仅是readonly,还是帮助客户端知道这一点,还是有另一个好处?
发布于 2021-12-06 12:54:38
readonly属性允许您创建不可变的对象,或者至少是不可变的属性。
这样,您就可以确保在对象的整个生命周期中,在初始化之后不会意外地更改值。
这是一个与常量(通过const或define设置)非常相似的概念,尽管有两个重要的区别:
readonly属性则是在运行时设置的,通常是在对象实例化期间(因此多个实例将能够保存不同的值*)可以通过只能通过getter访问的私有属性实现同样的目的。例如,在“旧日”中:
class Foo {
private DateTimeImmutable $createAt;
public function __construct() {
$this->createdAt = new DateTimeImmutable();
}
public function getCreatedAt(): DateTimeImmutable
{
return $this->createdAt;
}
}
$f = new Foo();
echo $f->getCreatedAt()->format('Y-m-d H:i:s');唯一的问题是它需要大量的样板代码。
使用PHP8.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')https://stackoverflow.com/questions/70243799
复制相似问题