Unset: примеры (PHP)

Функция unset в PHP: полное описание и практика
Раздел: Работа с переменными
unset(mixed var [, mixed ...vars]): void

Основные сведения о функции unset

Функция unset() в языке PHP предназначена для удаления переменных или элементов массива. Эта конструкция языка уничтожает указанные переменные, освобождая занимаемую ими память. Использование функции приводит к уменьшению счетчика ссылок на значение переменной. Когда счетчик достигает нуля, память освобождается сборщиком мусора.

Аргументы функции

Функция принимает один или несколько аргументов:

  • $var - обязательный аргумент, переменная для удаления.
  • $... - дополнительные необязательные аргументы, другие переменные для удаления.
Область применения

Функция применяется в ситуациях, когда необходимо явно удалить переменную или элемент массива до окончания выполнения скрипта. Типичные случаи использования включают освобождение памяти от больших данных, удаление конфиденциальной информации, управление элементами массивов в циклах.

Простые примеры использования

Удаление обычной переменной
$var = 'Значение';
echo $var;
unset($var);
var_dump(isset($var));
Значение
bool(false)
Удаление элемента массива
$array = ['a' => 1, 'b' => 2, 'c' => 3];
unset($array['b']);
print_r($array);
Array
(
[a] => 1
[c] => 3
)
Удаление нескольких переменных
$x = 10;
$y = 20;
$z = 30;
unset($x, $y, $z);
var_dump(isset($x), isset($y), isset($z));
bool(false)
bool(false)
bool(false)

Похожие функции в PHP

В PHP существуют альтернативные способы управления переменными и массивами.

Присваивание null

Присваивание значения null переменной сохраняет ее в области видимости, но очищает значение. Функция unset() полностью удаляет переменную.

$var = 'data';
$var = null;
var_dump($var); // NULL
var_dump(isset($var)); // false
array_splice()

Функция array_splice() удаляет элементы массива с возможностью замены. В отличие от unset(), она переиндексирует числовые ключи.

$arr = [10, 20, 30, 40];
array_splice($arr, 1, 1);
print_r($arr);
Array
(
[0] => 10
[1] => 30
[2] => 40
)
array_filter()

Функция array_filter() позволяет удалять элементы на основе callback-функции, обеспечивая более сложную логику фильтрации.

Аналоги в других языках

Unset в Javascript

Оператор delete удаляет свойства объектов, но не работает с переменными.

let obj = {a: 1, b: 2};
delete obj.a;
console.log(obj);
{ b: 2 }

Unset в Python

Инструкция del удаляет ссылки на объекты.

arr = [1, 2, 3, 4]
del arr[1]
print(arr)
[1, 3, 4]

Unset в MySQL

В SQL аналогом можно считать оператор DELETE для удаления строк из таблицы.

DELETE FROM users WHERE id = 1;

Частые ошибки

Попытка удалить несуществующий элемент

При удалении несуществующего элемента массива ошибка не возникает, но это может маскировать логические ошибки.

$arr = ['a' => 1];
unset($arr['b']); // Ничего не происходит
print_r($arr);
Array
(
[a] => 1
)
Удаление переменной в цикле по ссылке

Удаление элемента массива во время итерации по ссылке может привести к неожиданному поведению.

$array = [1, 2, 3];
foreach ($array as &$value) {
if ($value == 2) unset($value);
}
print_r($array);
Array
(
[0] => 1
[1] =>
[2] => 3
)
Удаление глобальной переменной внутри функции

Без использования ключевого слова global функция удалит только локальную копию.

$globalVar = 'test';
function removeVar() {
unset($globalVar);
}
removeVar();
echo $globalVar;
test

Изменения в новых версиях PHP

В PHP 8.0 произошли изменения в поведении функции unset() при работе с объектами. Ранее при попытке удалить свойство объекта, которое не существует, возникала ошибка уровня E_WARNING. Начиная с PHP 8.0, такое действие больше не генерирует предупреждение.

class Test {}
$obj = new Test();
unset($obj->undefinedProperty); // В PHP 7.x: Warning, в PHP 8+: Без предупреждения

Также в PHP 7.4 появилась возможность использовать unset() для сброса типизированных свойств объектов до значения по умолчанию, если они не были объявлены как nullable.

Расширенные примеры

Удаление вложенных элементов массива
Пример php
$data = [
'user' => [
'name' => 'Иван',
'contacts' => ['email' => 'test@mail.ru', 'phone' => '123456']
]
];
unset($data['user']['contacts']['phone']);
print_r($data);
Array
(
[user] => Array
(
[name] => Иван
[contacts] => Array
(
[email] => test@mail.ru
)
)
)
Работа с типизированными свойствами
Пример php
class User {
public string $name;
public ?int $age;
}
$user = new User();
$user->name = 'Алексей';
$user->age = 25;
unset($user->age); // Сбрасывает значение на null, так как свойство nullable
var_dump($user->age);
// unset($user->name); // Фатальная ошибка в PHP 8+
NULL
Удаление элемента с сохранением порядка ключей

Для ассоциативных массивов порядок ключей сохраняется после удаления.

Пример php
$order = ['first' => 1, 'second' => 2, 'third' => 3];
unset($order['second']);
$order['second'] = 2; // Добавляется в конец
print_r($order);
Array
(
[first] => 1
[third] => 3
[second] => 2
)
Освобождение больших данных в циклах
Пример php
$largeData = [];
for ($i = 0; $i < 10000; $i++) {
$largeData[] = str_repeat('data', 1000);
if ($i % 1000 === 0) {
unset($largeData[$i]); // Освобождение памяти
}
}
Удаление по ссылке
Пример php
$original = 'значение';
$reference = &$original;
unset($reference); // Удаляется только ссылка
echo $original;
значение

PHP unset function comments

En
Unset Unset a given variable