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