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

时间:2010-12-22 00:19:26

标签: php const

假设const属性是自动公开的,我是否正确?有没有办法让它们变得私密或受到保护?

提前致谢。

4 个答案:

答案 0 :(得分:37)

从历史上看,只要加载了类并且没有办法改变它,类常量总是可以公开访问。

从PHP 7.1开始,默认情况下它们仍然是公开的access modifiers may now be applied。以下是发行说明中的​​示例:

<?php
class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}

答案 1 :(得分:18)

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

很高兴知道更改私有常量只会影响它定义的类。很遗憾,我们没有这个选项。

请记住,当您学习对象设计时分析...你给类方法和属性最可能的限制访问,然后根据需要放松它们(更难以回到另一个方向,因为其他类/代码开始使用它们然后会破坏其他代码)。

替代方法

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

答案 2 :(得分:7)

我知道这个问题是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;
}

其他信息

答案 3 :(得分:2)

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