С помощью специального метода "__unset()" можно уничтожить член класса. При установки значений свойств с помощью специального метода "__set()" данные значения помещаются в закрытый массив.

В закрытом массиве уничтожение отдельных свойств не допускается, однако перегрузка метода "__unset()" позволяет снабдить класс такой возможностью:


class MyUnset {

	private $_myArray = array();

	public function __get ($_indexes) {
		return $this->_myArray[$_indexes];
	}

	public function __set ($_indexes, $_values) {
		$this->_myArray[$_indexes] = $_values;
	}

	public function __isset ($_indexes) {
		return isset($this->_myArray[$_indexes]);
	}
 
	/* Метод "__unset()" доступен с версии 5.1 */
	public function __unset ($_indexes) {
		unset($this->_myArray[$_indexes]);
	}

}

Несмотря на то что массив "$_myArray" является закрытым членом, его можно уничтожить при помощи функции "unset()".


$_Class_MyUnset = new MyUnset();
$_Class_MyUnset->newname = 'Новое свойство';

echo '<pre>';
print_r($_Class_MyUnset);
echo '</pre>';

unset($_Class_MyUnset->newname);

echo '<pre>';
print_r($_Class_MyUnset);
echo '</pre>';

Результат работы:


MyUnset Object
(
    [_myArray:MyUnset:private] => Array
        (
            [newname] => Новое свойство
        )

)
MyUnset Object
(
    [_myArray:MyUnset:private] => Array
        (
        )

)

Использование конструкции "unset()" приводит к уничтожению динамического свойства.

captcha