我发现PHP中的对象常量始终具有公共可见性,因此无法将它们设置为受保护或私有,如下所示:
<?php
class MyClass {
protected const constant = "this won't work";
}
?>
对此有何解释?我想不出强迫常数公开的充分理由。
答案 0 :(得分:4)
这是一个相当哲学的问题,在comments for Class constants in the PHP Manual中讨论过。争论似乎是 Visibility确定谁有权更改成员,而不是谁有权阅读。由于常量无法更改,因此当可见性被理解为访问修饰符时,让它们支持可见性是没有意义的。如果您遵循该论证或与the linked feature request below your question一起使用取决于您。
答案 1 :(得分:1)
我想不出强迫常数公开的充分理由。
嗯,常量是静态定义,绑定到类而不是实例化的对象。它们只能使用classname::constname
进行处理,并且不能更改。按理说它们是一个类蓝图的一部分,因此将可见性规则应用于它们并没有多大意义。
但这只是我的主观意见。有兴趣看看是否有任何基于硬OOP理论的东西出现了。