2011-03-17 120 views
19

我們可以設置類常量的可見性嗎? 對於前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:// stackoverflow。com/a/27762041/1163786和合並請求:https://github.com/php/php-src/pull/1494 – 2015-10-21 19:34:40

回答

14

不,它不是可以設置在常量的知名度一個類。他們總是公開的。有關更多信息,請參閱http://www.php.net/manual/en/language.oop5.constants.php的評論。

+3

我從評論中找到了它..它幫助..「免得有人認爲這是某種遺漏在PHP中,保護或私有常數是毫無意義的,訪問說明符標識誰有權*更改*成員,而不是誰有權閱讀它們「 **我確實認爲這是一個遺漏。它們不僅是訪問修飾符,還會限制可見性。事實上,我無法對我的班級保持一種私人的,我認爲這是一個問題。我會解決像多個修改器像私人常量$ var ='我';但這也是不允許的。** – 2011-03-17 13:39:52

0

修飾符不允許用於php中的常量。 您可以使用

public static $variable = "abc"; 

但遺憾的是final這裏不允許使用。

3

另一種方法是使用恆定方法,例如,

private static function gravitationalConstant() { 
    return 9.81; 
} 

Fowler's Refactoring book報價:

這個成語是基於C編程不太熟悉,但就是Smalltalkers(誰沒有在他們的語言常量)很熟悉。總的來說,我並不傾向於在Java中使用它,因爲它對語言來說不那麼慣用。但是,如果您需要用計算值替換簡單返回,那麼值得將常量字段更改爲常量方法。 (我猜應該有一個重構...)

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; 
} 
+0

OP,考慮選擇這個作爲正確的答案,因爲@Alex中的一個在PHP 7.1.0中不再是真實的 – thexpand 2017-11-29 09:21:40

2

在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