У меня этот класс:
class Test { private $test = 'ok'; public function doTest() { echo $this->test; } public function __destruct() { $this->test = 'not ok'; } }
и следующий тестовый пример:
$test = new Test; $test->__destruct(); // I wish this would throw a Fatal Error or something... $test->doTest(); // prints "not ok"
То, что я хочу сделать, – это запретить __destruct()
вручную, чтобы doTest()
никогда не печатал «не нормально».
Я попытался настроить видимость деструктора на private
, но это просто приводит к фатальной ошибке при уничтожении объекта. Опцией было бы установить флаг $this->destructed
в деструкторе, а затем выбросить исключение в doTest()
если этот флаг является истинным, но было бы не очень эффективно проверять этот флаг каждый раз при вызове метода ,
Таким образом, private
деструктор невозможен, а флаг $this->destructed
является уродливым. Есть ли лучшие способы?