首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP8.1中只读有什么好处?

在PHP8.1中只读有什么好处?
EN

Stack Overflow用户
提问于 2021-12-06 10:11:19
回答 1查看 1.1K关注 0票数 5

readonly现在在PHP8.1中可用,我只是想知道它的用途是什么?这是为了帮助编辑器知道这个属性仅仅是readonly,还是帮助客户端知道这一点,还是有另一个好处?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-06 12:54:38

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

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

这是一个与常量(通过constdefine设置)非常相似的概念,尽管有两个重要的区别:

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

可以通过只能通过getter访问的私有属性实现同样的目的。例如,在“旧日”中:

代码语言:javascript
复制
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。通过这样做可以实现同样的目标:

代码语言:javascript
复制
class Foo
{

    public function __construct(
        public readonly DateTimeImmutable $createdAt = new DateTimeImmutable()
    )
    { }

}

$f = new Foo();
echo $f->createdAt->format('Y-m-d H:i:s')
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70243799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档