我们可以设置类常量的可见性吗?
对于这个例子:
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';
答案 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;
}
这个成语对于基于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;
}
答案 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