39
A
回答
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,你可以用訪問修飾符(public
,private
或定義你的類常量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
相關問題
- 1. C++類(公共,私有和受保護)
- 2. 公共vs受保護
- 3. 有無論如何定義公共或私人或受保護的類在PHP
- 4. 範圍的私有,保護和公共
- 5. javadoc所有 - 私人,公共和受保護的成員
- 6. PHP:設置私人,受保護,在公共界面?
- 7. python中的私有公共受保護訪問說明符
- 8. 公共/受保護/私有繼承問題
- 9. 公共還是常量?
- 10. 如何確定一個方法是私有的,受保護的,內部的還是公共的?
- 11. D類的公共,私有和受保護的訪問限定符
- 12. 如何檢測類屬性是私有的還是受保護的
- 13. 「公共」和「私人」是類,而「保護」不是?
- 14. 與公共,私人和受保護區別
- 15. 公共私人和保護在objective-c
- 16. 「公共」,「私人」和「受保護」方法的確切做法是什麼?
- 17. 將受保護/私有屬性公開給某些類
- 18. 公共getter,帶CodeDOM的受保護setter
- 19. 基本片段類中的共享變量,公共還是私有?
- 20. 屬性公共和私人但不受保護?
- 21. 什麼是沒有公共私有或保護聲明的變量?
- 22. 將私有或受保護的方法轉換爲公開
- 23. 從受保護的嵌套類繼承的公共嵌套類?
- 24. PHP類中受保護/私有的重要性
- 25. 您應該在Ruby中使用私有,受保護和公共修飾符嗎?
- 26. C++爲什麼要使用公共,私有或受保護的繼承?
- 27. 爲什麼Joomla不使用私人,公共和受保護的關鍵字?
- 28. 正確訪問類中的私有/受保護變量的方法(PHP)
- 29. 公共類,但私有成員變量?
- 30. 保持API調用私有/受保護
是什麼力量讓它們隱藏起來的原因是什麼?即使它們是公開的 - 它們是隻讀的。 – zerkms 2010-12-22 00:21:10
常量是公開的,因爲它們要描述關於類的不變事實,而不是狀態或它。所以隱藏它們沒有任何價值。 – StasM 2010-12-22 00:50:40
可能會在`__getStatic`的未來版本中僞造它們。一般來說,如果您在腳本語言中完全需要訪問修飾符,這是值得懷疑的。 (Javascript/Python是更加面向對象的方式,不需要它們。) – mario 2010-12-22 02:14:08