如何创建无法分配的虚拟值?

时间:2014-10-28 17:30:04

标签: php singleton

我需要一个唯一类型的值,类似于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泄漏,因为它在全球范围内。

1 个答案:

答案 0 :(得分:0)

class Wild {
    private function __construct() {}

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

它不是相当相同,但它可能不如使用反射那么黑。