26

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

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';
4

7 回答 7

39

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

语法如下所示:

class ClassName {
    private const PRIVATE_CONST = 0;
    protected const PROTECTED_CONST = 0;
    public const PUBLIC_CONST = 0;
}
于 2016-04-03T13:26:23.637 回答
21

PHP7.1 起,类常量允许使用可见性修饰符,在以前的版本中,无法设置类中常量的可见性。他们总是公开的。有关更多信息,请参阅http://www.php.net/manual/en/language.oop5.constants.php上的评论。

于 2011-03-17T13:16:22.783 回答
4

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

private static function gravitationalConstant() {
    return 9.81;
}

引用Fowler 的重构书

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

于 2015-10-21T08:54:28.327 回答
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

于 2016-06-17T09:17:31.227 回答
0

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

public static $variable = "abc";

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

于 2011-03-17T13:18:12.093 回答
0

现在可以在今天发布的Alpha 版PHP 7.1中添加Class 常量可见性修饰符

于 2016-06-10T09:40:19.787 回答
0

在 PHP 7.1.0 中是可能的。请访问PHP RFC:支持类常量可见性

于 2016-12-02T10:22:47.313 回答