php protected const,关于const:PHP类常量 – 公共,私有还是受保护?
假設常量屬性是自動公開的,對嗎?有沒有辦法讓它們成為私有的或受保護的?
事先謝謝。
隱藏它們的原因是什么?即使它們是公開的——它們是只讀的。
常量應該是公共的,因為它們描述的是關于類的不可變事實,而不是狀態或它。所以隱藏它們是沒有價值的。
可能在將來的版本中用__getStatic偽造它們。一般來說,在腳本語言中是否需要訪問修飾符是有問題的。(javascript/python更加面向對象,不需要它們。)
是啊,回想起來有點傻。感謝您的回復。
我認為這根本不是一個愚蠢的問題;私有類常量會很有用:用于類中的內部使用…公共方法可以使用它們,但外部代碼不應該依賴它們…API可能會更改。
首先,如果您想創建一個數據庫類,那么將主機、用戶名、服務器、數據庫聲明為私有常量是有意義的,對嗎?
在ASP.NET中,如果我想存儲一些類需要但在類外部不需要的靜態信息,我將使用存儲在頂部、易于找到和更改的私有常量。
歷史上,只要加載了類,并且沒有辦法更改它,類常量總是可以公開訪問的。
從PHP7.1開始,默認情況下它們保持公共狀態,但現在可以應用訪問修飾符。以下是發行說明中的示例:
class ConstDemo
{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}
類常量應該具有私有/受保護的選項,因為公共會公開類的內部細節,其他類/代碼可能會誤認為它們可以使用,因為它們是公共的。
很高興知道更改私有常量只會影響它在其中定義的類。不幸的是,我們沒有這個選擇。
記得你學習對象設計和分析時的情景…您給類方法和屬性盡可能多的限制性訪問,然后根據需要放松它們(更難回到另一種方式,因為其他類/代碼開始使用它們,這樣會破壞其他代碼)。
解決辦法
最好的辦法是只創建一個私有或受保護的變量,并用大寫字母表示它是一個常量。您可以始終創建一個名為constant($value-to-be-constant)的類,該類實現正確的magic方法/spl接口,以防止更改它。
最好的辦法就是創建一個私有或受保護的static變量…
我知道這個問題已經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;
}
附加信息
類常量可見性上的RFC
關于類常量可見性的博客文章
從php7.1開始,可以使用訪問修飾符(public、private或protected定義類常量。請看下面的示例:
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, '
';
echo self::anthony_stark, '
';
}
}
echo superheroes::kal_el, '
';
superheroes::show_remaining();
學分:http://bellupper.io/post/48/defining-class-constants-in-php
總結
以上是生活随笔為你收集整理的php protected const,关于const:PHP类常量 – 公共,私有还是受保护?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php做一个网页的源代码,用HTML5做
- 下一篇: 最新超级搞笑沙雕的句子170个