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

43 php const

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

提前致谢.

Bol*_*ock 40

从历史上看,只要类被加载并且无法改变它,类常量总是可公开访问.

从PHP 7.1开始,默认情况下它们仍然是公共的,但现在可以应用访问修饰符.以下是发行说明中的​​示例:

<?php
class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}
Run Code Online (Sandbox Code Playgroud)


小智 18

类常量应该有被私人选项/保护,因为是公开暴露了其他类/代码错误的使用思维类的内部细节,他们都OK使用,因为它们是公开的.

这将是很高兴知道,改变一个私人不变只会影响它在定义的类.不幸的是,我们没有这样的选择.

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

替代方法

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


mro*_*rok 6

我知道这个问题是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;
}
Run Code Online (Sandbox Code Playgroud)

附加信息