2010-12-22 123 views
39

我正確地認爲const屬性是自動公開的嗎?有沒有辦法讓它們變得私密或保護?PHP類常量 - 公共,私有還是受保護的?

在此先感謝。

+6

是什麼力量讓它們隱藏起來的原因是什麼?即使它們是公開的 - 它們是隻讀的。 – zerkms 2010-12-22 00:21:10

+2

常量是公開的,因爲它們要描述關於類的不變事實,而不是狀態或它。所以隱藏它們沒有任何價值。 – StasM 2010-12-22 00:50:40

+0

可能會在`__getStatic`的未來版本中僞造它們。一般來說,如果您在腳本語言中完全需要訪問修飾符,這是值得懷疑的。 (Javascript/Python是更加面向對象的方式,不需要它們。) – mario 2010-12-22 02:14:08

回答

33

是的,只要類本身已加載,它們就可以全局訪問。據我所知,你不能修改PHP中的類常量的可訪問性。

19

類常量應該有私有/受保護的選項,因爲公開暴露了類的內部細節,其他類/代碼可能錯誤地使用,認爲它們可以使用,因爲它們是公共的。

很高興知道更改私有常量只會影響它定義的類。不幸的是,我們沒有這個選項。

回想起當你學習對象設計時&分析......你給類方法和屬性的最有限制的訪問可能,然後根據需要放鬆它們(更難以回到另一種方式,因爲其他類/代碼開始使用它們,然後破壞其他代碼)。

替代方法

最好的辦法是隻創建一個私有或受保護的變量和大寫它來顯示它是一個常數。你總是可以創建一個名爲常量($ value_to_be_constant)的類來實現正確的魔術方法/ spl接口,以防止它被更改。

5

我知道這個問題是6歲

的PHP 7.1(目前RC1)允許指定的類常量的知名度。

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

其他信息

2

由於php7.1,你可以用訪問修飾符publicprivate或定義你的類常量protected)。看看下面的例子:

<?php 
class superheroes{ 
    public const kal_el = 'Superman'; 
    protected const bruce_wayne = 'Batman'; # works php7.1 onwards 
    private const anthony_stark = 'Iron Man'; # works php7.1 onwards 

    public static function show_remaining(){ 
     echo self::bruce_wayne, '<br />'; 
     echo self::anthony_stark, '<br />'; 
    } 
} 
echo superheroes::kal_el, '<br />'; 
superheroes::show_remaining(); 

學分:http://dwellupper.io/post/48/defining-class-constants-in-php

相關問題