PHP为什么不允许私有const?


71

我有一个可以从其内部实现中使用常量受益的类,但是我想限制这些常量的可见性。PHP为什么不允许私有常量?还有另一种方法可以实现这一目标,还是PHP试图阻止我不了解的某种设计失误?


11
使用反射,您可以检索任何内容。因此,即使有私有常量,也没有任何方法可以真正隐藏数据。
zerkms 2011年

3
@zerkms在生成doxygen文档时(即,当您告诉doxygen不要公开私有类成员时)具有私有常量可能很有用。
Marcello Romani

1
@zerkms“反射”是什么意思?
My1


1
@zerkms哈哈。但从技术上讲,您甚至不需要像那样极端。如果脚本已经在服务器上并且可以以脚本用户的身份执行file_get_contents,则可以打开任何常量或伪常量(例如直接在文件中进行设置的priv static vars)
My1

Answers:


58

使用private static属性。

在这种情况下,您将在所有对象中使用相同的变量,并且如果要将其范围扩展到嵌套,则可以公开getter方法以获取其值并限制变量设置。


25
太遗憾了,这是一种解决方法。为什么不允许私有常量?
Juan Carlos Coto 2015年

66

从PHP 7.1开始,存在真正的私有常量。

private const PRIVATE_CONST = 0;

有关更多信息,请参见类常量可见性RFC


3
特质不在讨论范围之内,只是想补充,这是特质所不允许的……
obinoob

特征不在此堆栈溢出问题的范围内。我只想补充一下,这在特征上是不允许的……”
Peter Mortensen19年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.