В чем разница между функциями unset() и unlink() в PHP?

Ответ

Функции unset() и unlink() выполняют принципиально разные операции в PHP.

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

$user = ['name' => 'Alice'];
$temp = $user;

unset($user); // Уничтожает переменную $user
// echo $user; // Вызовет Notice: Undefined variable
// $temp при этом все еще существует и содержит массив.

unlink() — функция для работы с файловой системой. Она удаляет файл с диска.

$filePath = 'logs/temp.txt';
if (file_exists($filePath)) {
    if (unlink($filePath)) {
        echo "Файл успешно удален.";
    } else {
        echo "Не удалось удалить файл.";
    }
}
Сводка отличий: Аспект unset() unlink()
Объект Переменная, элемент массива, свойство объекта. Файл в файловой системе.
Контекст Работа с памятью и областью видимости. Работа с файловой системой (ввод-вывод).
Возвращаемое значение null (не возвращает значимого значения). true в случае успеха, false в случае ошибки.
Последствия Переменная становится неопределенной. Файл физически удаляется с диска.

Ответ 18+ 🔞

Слушай, а вот реально, народ постоянно путает unset() и unlink(). Это же, ёпта, как сравнивать молоток и швабру — общее только то, что оба в руках держат, а делают они вообще разное, ядрёна вошь.

Вот смотри. unset() — это когда ты берешь и просто выкидываешь из головы номер телефона бывшей. Переменная была, и вот её нет. Память освободилась, живи спокойно. Это чисто внутренние дела твоего скрипта.

$exGirlfriend = ['name' => 'Катя', 'mood' => 'нестабильный'];
$memory = $exGirlfriend; // на всякий случай сохранил в памяти

unset($exGirlfriend); // Всё, стёр, забыл, живу дальше.
// echo $exGirlfriend; // Тут будет охуенная ошибка, потому что переменной-то уже нет!
// Но $memory-то остался, чувак. Массив никуда не делся.

А вот unlink() — это уже серьёзно. Это не про память, это про реальный мир. Это как взять и физически сжечь старые любовные письма, которые валялись в ящике стола. Файл был на диске — и вот его нет. Навсегда. Без корзины.

$pathToLetters = 'home/old_love_letters.txt';
if (file_exists($pathToLetters)) {
    if (unlink($pathToLetters)) {
        echo "Файл нахуй отправлен. Свобода.";
    } else {
        echo "Чёрт, не удалось. Может, права нет? Или файл кто-то другой читает?";
    }
}

Короче, резюме, чтобы вообще ни у кого вопросов не осталось:

Что сравниваем unset() unlink()
Что удаляем Переменную из оперативки. Свойство, элемент массива. Файл с твоего жестокого жёсткого диска.
Где это происходит Внутри мозга PHP-процесса. В реальной файловой системе, на сервере.
Что возвращает Похуй, что возвращает. Ничего путного. true, если получилось, false — если всё пошло по пизде (нет прав, файл занят).
Что будет, если накосячить Скрипт упадёт с ошибкой типа «Чувак, я не знаю эту переменную». Файл так и останется лежать, а ты будешь в ауте, почему не удаляется.

Так что запомни раз и навсегда: unset() — для мозгов скрипта, unlink() — для файлов на диске. Перепутаешь — будет тебе хиросима, а не работающий код.