die()
Функция die() в PHP выводит сообщение и завершает выполнение текущего скрипта. По сути, она идентична функции exit().
Что делает функция die()
Функция die() останавливает выполнение PHP-скрипта в том месте, где она вызвана. После неё не выполняется ничего: никаких последующих инструкций, никакого вывода, никаких незавершённых циклов. При желании она может вывести сообщение (или вернуть код статуса) в момент остановки.
die() является псевдонимом exit(): они полностью взаимозаменяемы, принимают одинаковый аргумент и ведут себя идентично. PHP сохраняет оба имени, поскольку die читается естественно в конструкциях «остановиться при ошибке» (... or die(...)), тогда как exit уместнее, когда просто нужно завершить скрипт. Используйте то, что делает окружающий код понятнее; на этой странице везде используется die().
Синтаксис
die(string $message = "")
die(int $status = 0)die() принимает один необязательный аргумент, и то, что вы передаёте, меняет её поведение:
- string — PHP выводит эту строку, затем завершает выполнение. Это наиболее распространённый случай.
- Целое число — PHP завершает выполнение, используя это значение как код завершения, и ничего не выводит.
0означает успех; значения1–254сигнализируют об ошибке оболочке. Это важно только для скриптов командной строки (php script.php), когда другая программа читает$?, чтобы узнать, успешно ли завершился скрипт. - Ничего — скрипт просто завершается без вывода и с кодом завершения
0.
die() является языковой конструкцией, а не обычной функцией, поэтому скобки необязательны (die; допустимо). Их использование сохраняет согласованность кода с обычными вызовами функций.
Остановка скрипта при невыполнении условия
Наиболее частое применение die() — немедленное прерывание выполнения при обнаружении проблемы, чтобы оставшаяся часть скрипта не работала с некорректными данными:
Поскольку $name не равно "Jane", выполняется тело if, die() выводит Access denied!, и скрипт немедленно завершается — строка с echo никогда не достигается. Если бы $name было "Jane", die() был бы пропущен и скрипт вывел бы Welcome, Jane!.
Идиома «or die()»
die() часто используется в связке с выражением через or. PHP сначала вычисляет левую часть; только если она ложна (например, false или null), он переходит к выполнению die(). Это классический способ защитить операцию, которая может завершиться неудачей:
<?php
$file = fopen("missing-config.txt", "r") or die("Could not open the config file.");
echo "File opened successfully.";Если fopen() успешна, она возвращает файловый дескриптор (истинное значение), поэтому or die(...) никогда не достигается. Если файл отсутствует, fopen() возвращает false, выполняется die(), и скрипт останавливается до echo.
Эта идиома лаконична, но в современном коде предпочтительнее использовать реальную обработку ошибок — генерировать исключение или вести журнал через error_log() — чтобы сбои можно было перехватить и обработать, а не грубо завершить запрос. Более чистые альтернативы: trigger_error() и обработка ошибок.
Код завершения для скриптов командной строки
При запуске PHP из терминала код завершения сообщает вызывающей оболочке или CI-конвейеру, успешно ли завершился скрипт:
<?php
$ok = false;
if (!$ok) {
fwrite(STDERR, "Job failed\n"); // write the message yourself...
die(1); // ...then exit with a non-zero status
}
die(0); // successПередача целого числа в die() устанавливает статус, но ничего не выводит, поэтому любое читаемое сообщение нужно писать самостоятельно (здесь — в STDERR) перед выходом. Вызывающий скрипт может затем проверить $? и отреагировать на 1.
Подводные камни
die()не пропускает очистку, зарегистрированную с помощьюregister_shutdown_function()— функции обратного вызова при завершении и деструкторы объектов всё равно выполняются. Но код, написанный после вызоваdie(), никогда не выполняется.- В веб-запросе
die()завершает весь ответ. Вывод, уже отправленный браузеру, остаётся; всё, что стоит в очереди после вызова, отбрасывается. Избегайте его внутри функций, предназначенных для повторного использования — лучше верните значение или генерируйте исключение. - Целочисленный аргумент ничего не выводит.
die(1)не отображает1; если нужно показать сообщение пользователю, передайте string или выведите его до вызоваdie(). - Предпочитайте исключения в коде приложения.
die()нельзя перехватить, легко протестировать или восстановиться после него. Используйте его для скриптов верхнего уровня и быстрой диагностики.
Заключение
die() (и его двойник exit()) завершает PHP-скрипт на месте, при необходимости выводя сообщение или устанавливая код завершения. Он удобен для быстрой защиты в автономных скриптах и скриптах командной строки, но для логики production-приложений полагайтесь на исключения и правильную обработку ошибок, чтобы сбои оставались перехватываемыми. Чтобы глубже изучить написание и структурирование кода, использующего его, см. функции PHP.