为什么PHP不允许私有常量?

72

我有一个类在内部实现中需要使用常量,但我希望限制这些常量的可见性。为什么PHP不允许私有常量?是否有其他方法可以实现这一点,或者PHP试图阻止我无知地进行某种设计错误?


11
通过反射,您可以检索任何内容。因此,即使存在私有常量,也不会真正隐藏数据。 - zerkms
3
@zerkms 当生成Doxygen文档时(即当您告诉Doxygen不公开私有类成员时),拥有私有常量可能会很有用。 - Marcello Romani
1
@zerkms 你说的“Reflection”是什么意思? - My1
2
@My1 http://php.net/manual/zh/book.reflection.php - zerkms
1
@zerkms 哈哈。但从技术上讲,你甚至不需要走得那么极端。如果脚本已经在服务器上,并且它可以作为脚本用户执行file_get_contents操作,并且您可以打开任何常量或伪常量(例如具有直接设置文件中的私有静态变量) - My1
显示剩余2条评论
2个回答

73

3
特征不在讨论范围内,只是想补充一点,即在特征上是不允许这样做的。 - obinoob
Traits 不在这个 Stack Overflow 问题的范围内。我只想补充一点,即在 trait 上不允许使用那个...” - Peter Mortensen
请纠正我如果我错了。但在我看来,类常量的可见性只有在继承时才重要。常量只能定义一次并赋值。因此,变量是否对代码的其余部分可见并不重要,因为代码的其余部分无论如何都只有只读访问权限。只有当我想从这个类派生时,我才必须考虑该常量是否应该成为派生类的一部分。如果是,则该常量应该是公共或受保护的。如果它是私有的,则访问此常量的唯一方法是使用父关键字。 - Alexander Behling

58

使用private static属性。

这样一来,您将在所有对象中拥有相同的变量,如果您想将其范围扩展到嵌套,则可以公开一个getter方法获取其值并限制变量设置。


27
很遗憾,这只是一个解决方法。为什么不允许使用私有常量? - Juan Carlos Coto

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