(PHP 4, PHP 5, PHP 7, PHP 8)
unset — Удаляет переменную синтаксисом unset()
Языковая конструкция unset() уничтожает заданные переменные.
Поведение языковой конструкции unset() внутри функции зависит от типа переменной, которую пытаются удалить.
При удалении глобальной переменной внутри функции удалится только локальная переменная. Переменная в области видимости вызова функции сохранит то же значение, что и до вызова конструкции unset().
Пример #1 Пример удаления переменной конструкцией unset()
<?php
function destroy_foo()
{
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo;
?>
Внутри функции глобальную переменную удаляют через суперглобальный массив $GLOBALS:
Пример #2 Удаление конструкцией unset() глобальной переменной
<?php
function foo()
{
unset($GLOBALS['bar']);
}
$bar = "something";
foo();
?>
При удалении конструкцией unset() переменной, которую передали ПО ССЫЛКЕ, внутри функции удаляется только локальная переменная. Переменная в области видимости вызова функции сохранит то же значение, что и до вызова конструкции unset().
Пример #3 Удаление конструкцией unset() переменной по ссылке
<?php
function foo(&$bar)
{
unset($bar);
$bar = "blah";
}
$bar = 'something';
echo "$bar\n";
foo($bar);
echo "$bar\n";
?>
При удалении статической переменной внутри функции конструкция unset() удалит переменную только в контексте оставшейся части функции. При следующем вызове функции предыдущее значение переменной восстановится.
Пример #4 Удаление конструкцией unset() статической переменной
<?php
function foo()
{
static $bar;
$bar++;
echo "До удаления: $bar, ";
unset($bar);
$bar = 23;
echo "после удаления: $bar\n";
}
foo();
foo();
foo();
?>
var
Переменная, которую требуется удалить.
vars
Дополнительные переменные.
Функция не возвращает значения после выполнения.
Пример #5 Пример поведения языковой конструкции unset()
<?php
// Удаляем одну переменную
unset($foo);
// Удаляем один элемент массива
unset($bar['quux']);
// Удаляем набор переменных
unset($foo1, $foo2, $foo3);
?>
Замечание: Конструкцию нельзя вызывать как функцию переменной или передавать как именованный аргумент, поскольку это языковая конструкция, а не функция.
Замечание:
Языковая конструкция умеет удалять свойства объекта, которые видны в текущем контексте.
При доступе к неустановленному свойству вызывается метод __get(), а при попытке установить неустановленное свойство вызывается метод __set(), если эти магические методы определили в классе.
Замечание:
Невозможно удалить псевдопеременную текущего контекста
$this
внутри метода объекта.
Замечание:
При вызове конструкции unset() на недоступных или необъявленных свойствах объекта вызывается метод перегрузки __unset(), если этот метод определили в классе.