为啥 PHP 不允许私有 const?

Posted

技术标签:

【中文标题】为啥 PHP 不允许私有 const?【英文标题】:Why doesn't PHP permit private const?为什么 PHP 不允许私有 const? 【发布时间】:2011-10-09 20:51:24 【问题描述】:

我有一个类受益于在其内部实现中使用常量,但我想限制这些常量的可见性。为什么 php 不允许私有常量?是否有其他方法可以实现这一点,或者 PHP 是否试图阻止我不知道的某种类型的设计失误?

【问题讨论】:

使用反射你可以检索任何东西。因此,即使有私有常量,也没有任何方法可以真正隐藏数据。 @zerkms 在生成 doxygen 文档时(也就是说,当您告诉 doxygen 不要公开私有类成员时)使用私有常量可能很有用。 @zerkms “反射”是什么意思? @My1 php.net/manual/en/book.reflection.php @zerkms 哈哈。但从技术上讲,你甚至不需要那么极端。如果脚本已经在服务器上并且它可以作为脚本用户执行 file_get_contents,并且您可以打开任何常量或伪常量(如直接在文件中设置的 priv 静态变量) 【参考方案1】:

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

private const PRIVATE_CONST = 0;

请参阅Class Constant Visibility RFC 了解更多信息。

【讨论】:

特征不在讨论范围内,只想添加不允许在特征上... "Traits 不在此 Stack Overflow 问题的范围内。我只想补充一点,特征不允许这样做..." 如果我错了,请纠正我。但在我看来,类常量的可见性仅在涉及继承时才重要。一个常量只能定义一次并给定一个值。因此,该变量是否对其余代码可见并不重要,因为其余代码无论如何都具有只读访问权限。只有当我想从这个类派生时,我才必须考虑 const 是否应该是派生类的一部分。如果是这样, const 应该是公共的或受保护的。如果它是私有的,访问这个 const 的唯一方法是使用 parent 关键字。【参考方案2】:

使用private static 属性。

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

【讨论】:

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

以上是关于为啥 PHP 不允许私有 const?的主要内容,如果未能解决你的问题,请参考以下文章

PHP中可以使用私有常量吗? [复制]

为啥非 const 方法是私有的时不调用公共 const 方法?

为啥可以从对象范围之外调用私有方法?

为啥Java不允许我通过同一个类的方法访问私有方法?

为啥允许静态方法调用私有方法?

为啥枚举可以有包私有构造函数?