PHP类常量 – 公共,私有还是受保护?

我正确的假设const属性是自动公开的吗? 有没有办法让他们私密或保护?

提前致谢。

是的,只要class级本身被加载,他们就可以全球访问。 据我所知,你不能在PHP中修改类常量的可访问性。

类常量应该有私有/受保护的选项,因为公开暴露了类的内部细节,其他类/代码可能错误地使用,认为它们可以使用,因为它们是公开的。

很高兴知道改变一个私有常量只会影响它定义的类。不幸的是,我们没有这个选项。

回想一下,当你学习对象devise和分析时…你给类方法和属性提供了最有限的访问权限,然后根据需要放松它们(因为其他类/代码开始使用它们,会破坏其他代码)。

替代方法

最好的办法是创build一个私有或受保护的variables,并用大写来表示它是一个常量。 你总是可以创build一个名为constant($ value_to_be_constant)的类来实现正确的魔术方法/ spl接口,以防止它被改变。

我知道这个问题已经6岁了

PHP 7.1(现在是RC1)允许指定类常量的可见性。

 class Token { // Constants default to public const PUBLIC_CONST = 0; // Constants then also can have a defined visibility private const PRIVATE_CONST = 0; protected const PROTECTED_CONST = 0; public const PUBLIC_CONST_TWO = 0; //Constants can only have one visibility declaration list private const FOO = 1, BAR = 2; } 

附加信息

  • 有关类常量可见性的RFC
  • 类常量可见性博客文章

php7.1开始 ,您可以使用访问修饰符publicprivateprotected )来定义类常量。 看看下面的例子:

 <?php class superheroes{ public const kal_el = 'Superman'; protected const bruce_wayne = 'Batman'; # works php7.1 onwards private const anthony_stark = 'Iron Man'; # works php7.1 onwards public static function show_remaining(){ echo self::bruce_wayne, '<br />'; echo self::anthony_stark, '<br />'; } } echo superheroes::kal_el, '<br />'; superheroes::show_remaining(); 

积分: http : //dwellupper.io/post/48/defining-class-constants-in-php