2014-10-28 39 views
1

我需要一個唯一類型的值,類似於C#的DBNull.Value如何創建一個不可分配的虛擬值?

我正在嘗試如何在PHP中實現此功能。下面是我想出迄今:

class Wild { 
    public static $value; 

    private function __construct() {} 
} 

call_user_func(function() { 
    $r = new ReflectionClass(Wild::class); 
    Wild::$value = $r->newInstanceWithoutConstructor(); 
}); 

現在,我可以很容易地訪問我的單身通過Wild::$value。問題在於任何人都可以隨時將Wild::$value重新分配給其他人,這會破壞整個API。有什麼辦法可以防止這種情況發生?

N.B.構造函數是私有的,以防止意外實例化。關閉是防止$r漏出,因爲它在全球範圍內。

+0

@PleaseWait你在問什麼? – mpen 2014-10-28 17:32:55

+0

@PleaseWait我還是不明白你想說什麼。 Wild :: $ value'需要公開訪問,但開發人員不應該將其重新分配給其他內容。 – mpen 2014-10-28 17:36:00

回答

0
class Wild { 
    private function __construct() {} 

    public static function value() { 
     static $value; 
     if($value === null) $value = new self; 
     return $value; 
    } 
} 

這不是相當相同,但它可能比使用反射反正少哈克。