php class constant visibility

问题描述:

我们可以设置类常量的可见性吗? 对于前php class constant visibility

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

该类CANWE写

public const CONST_VALUE = 'A constant value'; 

private const CONST_VALUE = 'A constant value'; 

protected const CONST_VALUE = 'A constant value'; 
+5

请注意,PHP提供了一个用于提供类常量可见性的RFC,请参见[PHP RFC:支持类常量可见性](https://wiki.php.net/rfc/class_const_visibility)。 – 2015-10-07 17:21:24

+0

不,这种语言功能不存在(,但)。它基本上是被称为“常量作为具有访问级别的变量”的Java特性。在这个答案中,您可以在“类常量可见性”RFC(请参阅上面的注释)中找到关于此语言功能的更多信息:http:// *。com/a/27762041/1163786和合并请求:https://github.com/php/php-src/pull/1494 – 2015-10-21 19:34:40

不,它不是可以设置在常量的知名度一个类。他们总是公开的。有关更多信息,请参阅http://www.php.net/manual/en/language.oop5.constants.php的评论。

+3

我从评论中找到了它..它帮助..“免得有人认为这是某种遗漏在PHP中,保护或私有常数是毫无意义的,访问说明符标识谁有权*更改*成员,而不是谁有权阅读它们“ **我确实认为这是一个遗漏。它们不仅是访问修饰符,还会限制可见性。事实上,我无法对我的班级保持一种私人的,我认为这是一个问题。我会解决像多个修改器像私人常量$ var ='我';但这也是不允许的。** – 2011-03-17 13:39:52

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

public static $variable = "abc"; 

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

另一种方法是使用恒定方法,例如,

private static function gravitationalConstant() { 
    return 9.81; 
} 

Fowler's Refactoring book报价:

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

更新:常量的可见性修饰符已添加到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; 
} 
+0

OP,考虑选择这个作为正确的答案,因为@Alex中的一个在PHP 7.1.0中不再是真实的 – thexpand 2017-11-29 09:21:40

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

在PHP最新版本(7.1.0 PHP),它会提供。

示例语法就像。

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

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