PHP public 只读属性与 getter 的私有字段

PHP public readonly properties vs private field with getter

PHP 8.1 引入了 readonly class 属性。例如,在我写之前:

class User
{
    public string $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public getName(): string {
        return $this->name;
    }
}

但现在我可以做到:

class User
{
    public function __construct(
        public readonly string $name,
    ) {}
}

后者显然更紧凑,所以我想知道这种语法是否完全取代了每个用例的前者,或者仍然存在应该首选“旧”语法的情况?

“旧”方式的一个优点是您可以为 getter 和 setter 选择不同的访问级别,而 readonly 字段只有一个访问级别。例如。当您希望 setter 成为 protected.

使用 getters 的另一个优点是它允许您在不更改 class 接口的情况下更改实现。