PHP 8.1 中 readonly 有什么好处?

问题描述 投票:0回答:1

在 PHP 8.1 中,readonly 关键字现已可用。我很好奇它的目的。是为了帮助编辑者认识到属性是只读的,还是为了帮助客户理解这一特性,还是有其他目的?

php oop php-8.1
1个回答
11
投票

readonly
属性允许您创建不可变的对象,或者至少是不可变的属性。

这样您就可以确保在初始化后,在对象的整个生命周期中,值不会意外更改。

这是一个与常量非常相似的概念(通过

const
define
设置),尽管有两个重要的区别:

  • 常量需要在“编译”时定义,而
    readonly
    属性将在运行时设置,通常是在对象实例化期间(因此多个实例将能够保存不同的值*)
  • 与常量相反,常量存在于全局范围内,对于类常量,它们的值与类相关,而不是与实例相关。

可以使用只能通过吸气剂访问的私有财产来实现相同的目的。例如,在“过去的日子”:

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');

唯一的问题是它需要大量样板代码。

使用 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')
© www.soinside.com 2019 - 2024. All rights reserved.