PHP只读属性还是常量?

6
自 PHP 8.1 起,只读属性 已经有了本地支持。但我们已经有了具有可见性的常量。
请帮我回答以下两个问题:
  1. 使用常量和属性有哪些区别?
  2. 什么情况下使用哪一个?

5
一个重要的区别是你不能在运行时动态设置类常量,而你可以在构造函数中使用只读属性来实现这个功能。另外一个显著的不同在于访问两者的方式。除非属性是静态的,否则你需要有一个实例(所有实例可以有不同的值),而常量总是可以在没有实例的情况下访问。 - M. Eriksson
2
我还要补充一点,readonly是一个属性修饰符,就像可见性(public、private、protected)一样,它传达了意图,即不可变性。一旦初始化了带有这种属性的类的实例,类的作者希望每个人都知道,包括他们自己,某些字段保证永远不会改变,无论是故意还是意外地。 - Chris Haas
1个回答

3

写入差异

一个重大的区别是您无法在运行时动态设置类常量,但可以使用只读属性(从构造函数)。

读取差异

访问这两个的方式也有很大的不同。除非该属性是静态的,否则您将需要一个实例(而所有实例可以具有不同的值),而常量始终可以在没有实例的情况下访问。

感谢M. Eriksson


1
因此,只读属性是更好的选择,因为它需要一个实例,因此除非该属性是静态的,否则该属性在全局范围内不可见,而常量始终是静态的,因此可以从全局范围调用。因此,可以说,类常量在功能上等同于静态只读属性。例如,如果您编写ORM-Class,则建议将相应的数据库表存储在只读属性中,以便仅从类内部访问此信息。 - Alexander Behling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接