2014-10-28 38 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; 
    } 
} 

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