php 类常量可见性
Posted
技术标签:
【中文标题】php 类常量可见性【英文标题】:php class constant visibility 【发布时间】: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 的 RFC 提出了类常量可见性,请参阅 PHP RFC: Support Class Constant Visibility。 不,此语言功能不存在(但)。它基本上是称为“具有访问级别的常量作为变量”的 Java 功能。您可以在“class const visibility”RFC(参见上面的评论)中找到有关此语言功能的更多信息,在此答案中:***.com/a/27762041/1163786 和拉取请求:github.com/php/php-src/pull/1494 【参考方案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
【讨论】:
以上是关于php 类常量可见性的主要内容,如果未能解决你的问题,请参考以下文章