【问题标题】:php class constant visibilityphp 类常量可见性
【发布时间】:2011-07-17 09:40:33
【问题描述】:

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

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

【问题讨论】:

标签: php class-constants


【解决方案1】:

更新: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;
}

【讨论】:

  • OP,考虑选择这个作为正确的答案,因为来自@Alex 的答案从 PHP 7.1.0 起不再适用
【解决方案2】:

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

【讨论】:

  • 我从评论中找到了这个.. 它帮助.. “以免有人认为这是 PHP 中的一个遗漏,拥有受保护或私有常量根本没有意义。访问说明符标识谁拥有更改成员的权利,而不是谁有权阅读它们” 我确实认为这是一个遗漏。它们不仅是访问修饰符,而且还限制了可见性。事实上,我不能为我的班级创建一个私有的常量,我认为这是一个问题。我会满足于多个修饰符,例如 private const $var = 'me';但这也是不允许的。
【解决方案3】:

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

private static function gravitationalConstant() {
    return 9.81;
}

引用Fowler's Refactoring book:

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

【讨论】:

    【解决方案4】:

    在 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

    【讨论】:

      【解决方案5】:

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

      public static $variable = "abc";
      

      但遗憾的是,这里不允许使用 final

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2015-10-20
            • 1970-01-01
            • 2014-09-20
            • 1970-01-01
            • 2016-03-31
            • 2014-04-05
            • 2015-11-24
            • 2018-03-20
            • 2012-08-01
            相关资源
            最近更新 更多