php类常量可见性

时间:2011-03-17 13:11:51

标签: php class-constants

我们可以设置类常量的可见性吗?
对于这个例子:

class MyClass {
    const CONST_VALUE = 'A constant value';
}

我们可以指定

public const CONST_VALUE = 'A constant value';

private const CONST_VALUE = 'A constant value';

protected const CONST_VALUE = 'A constant value';

7 个答案:

答案 0 :(得分:38)

更新:PHP 7.1中添加了常量的可见性修饰符(2016年12月1日发布)。请参阅RFC:Support Class Constant Visibility

语法如下:

class ClassName {
    private const PRIVATE_CONST = 0;
    protected const PROTECTED_CONST = 0;
    public const PUBLIC_CONST = 0;
}

答案 1 :(得分:14)

PHP7.1开始,对于类常量,允许使用可见性修饰符,在以前的版本中,不可能在类中设置常量的可见性。他们总是公开的。有关详情,请参阅http://www.php.net/manual/en/language.oop5.constants.php上的评论。

答案 2 :(得分:3)

另一种方法是使用常数方法,例如

private static function gravitationalConstant() {
    return 9.81;
}

引自Fowler's Refactoring book

  

这个成语对于基于C的程序员来说并不那么熟悉,但对于Smalltalkers(他们的语言中没有常量)非常熟悉。总的来说,我不倾向于在Java中使用它,因为它不太习惯于语言。但是,如果需要使用计算值替换简单返回,则值得将常量字段更改为常量方法。 (我想应该有重构......)

答案 3 :(得分:2)

在PHP最新版本(PHP 7.1.0)中,它将可用。

示例语法就像。

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;
}

请参阅以下链接。 https://wiki.php.net/rfc/class_const_visibility

答案 4 :(得分:0)

php中的常量不允许使用修饰符。 你可以使用

public static $variable = "abc";

但遗憾的是final这里不允许。

答案 5 :(得分:0)

现在可以在PHP 7.1中发布Alpha今天添加Class constant visibility modifiers

答案 6 :(得分:0)

在Php 7.1.0中是可能的。请访问PHP RFC: Support Class Constant Visibility