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开始 ,您可以使用访问修饰符 ( public
, private
或protected
)来定义类常量。 看看下面的例子:
<?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