__unset не поможет. Я так понимаю, код примерно такой:
В общем, правильное решение одно - НЕ ДЕЛАТЬ ТАК.
PHP:
class C {
protected $foo = 'foo';
protected $data = [];
public function test() {
var_dump($this->foo);
unset($this->foo);
// now everything goes to magic methods
var_dump($this->foo);
$this->foo = 'bar';
var_dump($this->foo);
}
public function __get($k) {
if (!array_key_exists($k, $this->data)) {
throw new OutOfBoundsException;
}
return $this->data[$k];
}
public function __set($k, $v) {
$this->data[$k] = $v;
}
public function __unset($k) {
unset($this->data[$k]);
}
}
$c = new C;
$c->foo = 'bazz';
$c->test();
var_dump($c->foo);
Код:
$ php test.php
string(3) "foo"
string(4) "bazz"
string(3) "bar"
string(3) "bar"