Мне нужно одно значение уникального типа, похожего на 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. Есть ли способ предотвратить это?
Нотабене Конструктор является частным, чтобы предотвратить случайную реализацию. Закрытие предотвратить $r
от утечки, потому что это в глобальном масштабе.
class Wild {
private function __construct() {}
public static function value() {
static $value;
if($value === null) $value = new self;
return $value;
}
}
Это не довольно то же самое, но это, вероятно, менее хакерский, чем использование отражения в любом случае.
Других решений пока нет …