W3docs

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 означает успех; значения 1254 сигнализируют об ошибке оболочке. Это важно только для скриптов командной строки (php script.php), когда другая программа читает $?, чтобы узнать, успешно ли завершился скрипт.
  • Ничего — скрипт просто завершается без вывода и с кодом завершения 0.

die() является языковой конструкцией, а не обычной функцией, поэтому скобки необязательны (die; допустимо). Их использование сохраняет согласованность кода с обычными вызовами функций.

Остановка скрипта при невыполнении условия

Наиболее частое применение die() — немедленное прерывание выполнения при обнаружении проблемы, чтобы оставшаяся часть скрипта не работала с некорректными данными:

php— editable, runs on the server

Поскольку $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.

Практика

Практика
Какова функция 'die()' в PHP?
Какова функция 'die()' в PHP?
Was this page helpful?