Я считаю, что все они (и даже die()
или die(0)
) идентичны. Если они не идентичны, что предпочтительнее для успешного выхода из скрипта? Если они идентичны, существует ли какой-либо предпочтительный стандарт, указывающий на успешное выполнение сценария? Я обычно использую exit;
.
РЕДАКТИРОВАТЬ: Все ответы имеют « die()
и exit()
идентичны», хотя я говорю это в своем вопросе. Я обновил заголовок, чтобы, надеюсь, прояснить, что это НЕ мой вопрос. Я хочу четко указать на успех из сценария командной строки.
return
имеет другое значениеОтветы:
Все они идентичны. Я почти уверен, что
die()
это просто псевдонимexit()
, но даже если это не так, он все равно действует идентично.Когда одной из этих функций передается строковый аргумент, она распечатывает строку перед завершением процесса. Когда он встречает целое число меньше 255, это целое число считается кодом возврата для процесса, который передается обратно процессу, который вызвал сценарий PHP. Это особенно полезно при написании приложений командной строки (PHP не только для Интернета!).
Что касается разницы между
exit
,exit()
иexit(0)
, там действительно нет. Определенно нет никакой разницы между первыми двумя, потому чтоexit
технически это языковая конструкция, а не функция, поэтому ее можно вызывать как со скобками, так и без них, какecho
. Возврат кода0
означает, что «эта программа была успешно запущена / без ошибок», и хотя я не знаю, что именно происходит, когда вы не передаете аргумент, PHP.net говорит, что отсутствие аргументаexit
указывает на успех, поэтому я готов поспорить он возвращается0
, хотя снова PHP.net не показывает значение по умолчанию для аргумента.источник
exit(0)
означает выход с успехом,exit(1)
означает выход с ошибкой.exit
(илиdie
) со строковым параметром. Увидев, например, обычнуюdie(-1)
идиому, а такжеdie("Poo!...")
много звонков, можно не быть в этом так уверенным, и в любом случае: угадывание должно принадлежать другим профессиям ... Итак, FTR: это 0. Что также означает, что последнееdie("error!")
было бы наиболее скорее всего, это ошибка в сценариях CLI! : -oКак уже упоминалось несколькими людьми, die () и exit () абсолютно одинаковы.
Если вы посмотрите документацию PHP , есть два варианта аргументов:
Числовое значение. Это полезно, только если вы используете PHP из командной строки, а не веб-сервер. Нулевое значение указывает на успех. Ненулевое значение означает, что произошел сбой.
Строковое значение. Это будет отображаться в браузере при выходе.
Вместо die () или exit () я рекомендую использовать исключения и настраиваемый обработчик исключений верхнего уровня для управления условиями сбоя.
У вас будет больше гибкости, чтобы делать такие вещи, как автоматический журнал ошибок. Кроме того, если вы используете PHP для реализации JSON API, этот обработчик исключений может вместо этого вернуть действительный фрагмент JSON, указывающий на ошибку.
источник
Я бы сказал, что с точки зрения лучшей семантики
die($arg);
следует использовать ненормальное или неожиданное завершение, даже когда - конечно - вы все еще поймали его. Иexit($arg);
должен использоваться для нормального (ожидаемого / контролируемого) завершения процесса, как inbreak;
дляfor
илиwhile
илиswitch
структуры, но с окончательным концом.Тем не менее .. Я лично часто использую общую
if { } else { }
структуру для управления различными ветвями огромных процессов или буферизации вывода, поэтому не нужно использовать "exit" ..Я также использую
die($arg)
простую семантику отлова ошибок, например, в$db = mysql_connect([$args]) or die ($error);
...источник
die();
является синонимомexit();
и функционально идентичен.Стандартный способ - использовать нулевой код выхода для обозначения успеха и все остальное для обозначения состояния ошибки.
источник
die () обычно используется для уничтожения скрипта с выводом ошибки:
die("There was a fatal error");
where-as exit обычно используется как успешный выход (по крайней мере, в моем коде)
В руководстве по PHP сказано, что функции идентичны.
источник
Я проиграю к черту , но в некоторых случаях при взломе в CLI мы не хотим, чтобы программа была убита, и не желаем продолжать полное выполнение.
Здесь цель состоит в том, чтобы избежать вызовов api отдельного файла hand-point. Скажем, у меня есть хорошая кнопка воспроизведения в моем интерфейсе, которая выполняет системные вызовы.
Пример 1. Программа завершается после выполнения задания, данные не возвращаются. Это не нужно.
if ($_GET["play"] != ""){ // Some job exit; } /* Huge amount of data*/
Пример 2: Программа все еще работает , передавая все данные в запросе GET. В этом случае в этом нет необходимости. Это тормозит браузер со всеми данными, которые у него уже есть.
if ($_GET["play"] != ""){ // Some job } /* Huge amount of data*/
Пример 3: Программа все еще работает , данные не возвращены должным образом, команда воспроизведения была выполнена, но весь набор данных проанализирован, это ненужная работа, может замедлить работу php / машины.
/* Huge amount of data*/ if ($_GET["play"] != ""){ // Some job }
Пример 4: Программа все еще выполняется , данные не вернулись, как ожидалось, команда воспроизведения была выполнена, все данные не были проанализированы, php очень быстро вернул 200OK с пустым ответом, как и ожидалось. Всем доволен!
if ($_GET["play"] != ""){ // Some job goto END; } /* Huge amount of data*/ END;
Да! Использование GOTO иногда считается лучшим решением 🔨 -!
https://www.php.net/manual/en/control-structures.goto.php
источник
die
в точности эквивалентенexit
.Из руководства :
Это полезно только в том случае, если у вас есть какая-то оболочка, которая что-то делает в зависимости от статуса выхода. Если у вас нет особой необходимости сообщить код выхода внешнему миру, просто
exit;
.источник