Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对象常量的可见性_Php_Oop_Visibility_Constants - Fatal编程技术网

Php 对象常量的可见性

Php 对象常量的可见性,php,oop,visibility,constants,Php,Oop,Visibility,Constants,我发现PHP中的对象常量始终具有公共可见性,因此无法将它们设置为受保护或私有,如下所示: <?php class MyClass { protected const constant = "this won't work"; } ?> 我想不出一个好的理由强迫常数公开 常量是静态定义,绑定到类,而不是实例化对象。只能使用classname::constname对其进行寻址,并且不能对其进行更改。它们是类蓝图的一部分,因此对它们应用可见性规则是没有意义的 不过,这只是我的主

我发现PHP中的对象常量始终具有公共可见性,因此无法将它们设置为受保护或私有,如下所示:

<?php
class MyClass {
    protected const constant = "this won't work";
}
?>

我想不出一个好的理由强迫常数公开

常量是静态定义,绑定到类,而不是实例化对象。只能使用
classname::constname
对其进行寻址,并且不能对其进行更改。它们是类蓝图的一部分,因此对它们应用可见性规则是没有意义的


不过,这只是我的主观看法。有兴趣看看是否有基于硬OOP理论的东西出现

这是一个相当哲学化的问题,这一问题将在。争论似乎是确定谁有权更换成员,而不是谁有权阅读成员。因为常量不能更改,所以当可见性被理解为访问修饰符时,让它们支持可见性是没有意义的。你是否遵循这一论点或是否遵循这一论点取决于你。

Hmm,静态类成员也应该按照这一定义公开吗?(相关)@Pekka是的,我还没有决定遵循哪一个。我可以看出常数具有可见性的用途,但再一次,我从来没有强烈感觉到这一点。常量是常量,如果我需要可见性,我就使用属性。是的,我也认为这两种方式都没什么大不了的(尽管这很有趣)。但“可见性控制写作权”的论点对我来说毫无意义。对我来说,这听起来完全不对。