Как я могу создать неназначаемое фиктивное значение?

Мне нужно одно значение уникального типа, похожего на 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 от утечки, потому что это в глобальном масштабе.

1

Решение

class Wild {
private function __construct() {}

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

Это не довольно то же самое, но это, вероятно, менее хакерский, чем использование отражения в любом случае.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]