exit () просто выводит программу с числовым статусом выхода, а die () выводит сообщение об ошибке в stderr и выходит со статусом EXIT_FAILURE. so exit() is exit and die() is also exit :)
псевдонимы позволяют программистам использовать тот, который удобен для. Я помню выход лучше, чем умереть. Некоторые помнят, что умирают лучше, чем выход.
Несмотря на то, что они делают то же самое, я обычно резервирую dieдля остановок, связанных с ошибками, и exitдля всех других сценариев. Кажется, что при чтении кода это выглядит лучше.
nextgentech
7
Извините, что оживил это, но по крайней мере для меня ... dieписать гораздо быстрее, чем exit... Я начинаю использовать, exitпотому что он более читабелен для не-PHP-программистов, но dieпросто быстрее печатать, когда вы находитесь в спешка. Кроме того, по тому, как я печатаю, мне не нужно менять положение рук, чтобы писать die.
Как программист C и Perl, я был готов ответить: «Почему exit () просто спасает программу с числовым состоянием выхода, а die () выводит сообщение об ошибке в stderr и выходит со статусом EXIT_FAILURE. " Но потом я вспомнил, что мы находимся в грязной синтаксической стране PHP.
В PHP exit () и die () идентичны.
Очевидно, дизайнеры подумали: «Хм, давайте заимствуем exit () из C. И, возможно, людям Perl это понравится, если мы возьмем die () также как и из Perl . Ой! У нас есть две функции выхода! Давайте сделаем так, чтобы они оба может взять строку или целое число в качестве аргумента и сделать их идентичными! "
Конечным результатом является то, что на самом деле это не делает вещи более «легкими», просто более запутанными. C и Perl-кодеры будут продолжать использовать exit (), чтобы бросить только целочисленное значение выхода, и die (), чтобы бросить сообщение об ошибке и завершиться с ошибкой. Новички и люди, говорящие на языке «как первый язык», вероятно, зададутся вопросом «ммм, две функции выхода, какую мне использовать?» Руководство не объясняет, почему есть exit () и die ().
В целом, PHP имеет много странной избыточности, подобной этой, - он старается быть дружелюбным к людям, которые происходят из разных языков, но при этом создает избыточную избыточность.
Несмотря на то, что речь идет о 100-м ответе о том, что они эквивалентны (как также видно из моего ответа ^^), это действительно добавляет ОЧЕНЬ хорошие плюсы. Больше всего то, что они НЕ одинаковы в других языках (таким образом, путаница в первую очередь). (+1)
Левит
@ Левит, нет, нет, вы все неправильно поняли . Никто не владеет именами, а разные языки используют одни и те же имена неравным образом. Это хорошо, потому что нам не нужен еще один стандартный способ работы. «Путаница в первую очередь» происходит из-за того, что PHP назначает два разных имени одной функции ..
Pacerier
2
@Pacerier: Конечно, если вы посмотрите на это с точки зрения «кто виноват», это абсолютно правильно. Тем не менее это также факт, что они просто означают разные вещи на нескольких языках (что нормально). Глядя на это с нейтральной точки зрения, это определенно верно: существует путаница из-за различных значений (даже если это ошибка php в создании двух одинаковых псевдонимов функций). Я определенно не хотел показывать пальцем ни на один из этих языков, если это было то, что вы поняли из моего комментария ... (отлично xkcd кстати (Y) ^^)
Левит
2
Это обязательно должен быть выбранный ответ, хорошее описание!
Коди Браун
Другой пользователь ответил, что exit()не закрывает соединение, а закрывает die(), кажется актуальным.
ner0
62
Как указано выше, эти две команды создают один и тот же токен синтаксического анализатора.
НО
Есть небольшая разница, и это то, сколько времени занимает парсер, чтобы вернуть токен.
Я не изучал синтаксический анализатор PHP, но если это длинный список функций, начинающийся с «d», и более короткий список, начинающийся с «e», то должен быть временной штраф при поиске имени функции для функций, начинающихся с « е». И могут быть другие различия из-за того, как проверяется полное имя функции.
Я сомневаюсь, что это будет измеримо, если у вас нет «идеальной» среды, предназначенной для разбора PHP, и большого количества запросов с различными параметрами. Но должна быть разница, ведь PHP - интерпретируемый язык.
@ Timeless, Перфекционисты не сказали бы: «PHP - интерпретируемый язык». PHP - это язык, который можно интерпретировать или компилировать в зависимости от настроек вашего сервера.
Pacerier
29
И ... "die" имеет длину 3 символа против 4 для "exit". Так что это занимает на 25% меньше памяти и файлового пространства! ;)
Ян Дерк
2
'' если это длинный список функций, начинающихся с "d", и более короткий список, начинающийся с "e", то при поиске имени функции для функций, начинающихся с "e" ', должно быть затрачено время. означают , что штрафное время будет происходить при поиске функции , начиная с г Как правило, чем больше список, тем больше времени , чтобы найти пункт в этом.
Pere
9
Как вы писали, вы не изучали парсер PHP. Спасибо за этот бесполезный ответ, поскольку он основан на ваших мечтах о том, как реализован PHP.
это также делает удобным, когда кто-то пришел с другого языка, если они каким-либо образом
знакомы
обратите внимание , что при работе PHP в интерактивном режиме ( php -a) die;, die();, exit;и exit();не имеет никакого эффекта, в то время как exit(без запятой) выходит в интерактивном режиме.
Сантьяго Аристи
31
Как и все другие правильные ответы говорит, dieи exitявляются идентичными / псевдонимами.
Хотя у меня есть личное соглашение, что когда я хочу прекратить выполнение скрипта, когда это ожидается и желательно, я использую exit;. И когда мне нужно завершить выполнение из-за некоторых проблем (не удалось подключиться к БД, не удается записать в файл и т. Д.), Я использую die("Something went wrong.");«убить» сценарий.
Когда я использую выход:
header("Location: http://www.example.com/");/* Redirect browser *//* Make sure that code below does not get executed when we redirect. */exit;// I would like to end now.
Когда я использую die:
$data = file_get_contents("file.txt");if( $data ===false){die("Failure.");// I don't want to end, but I can't continue. Die, script! Die!}
do_something_important( $data );
Таким образом, когда я вижу exitкакой-то момент в моем коде, я знаю, что в этот момент я хочу выйти, потому что логика заканчивается здесь. Когда я вижу die, я знаю, что хотел бы продолжить выполнение, но я не могу или не должен из-за ошибки в предыдущем выполнении.
Конечно, это работает только при работе над проектом в одиночку. Когда будет больше людей, никто не будет мешать им пользоваться dieили exitтам, где это не соответствует моим правилам ...
На этой странице написано, dieчто это союзники exit, поэтому они идентичны. Но также объясняет, что:
есть функции, которые изменили имена из-за очистки API или по какой-то другой причине, а старые имена хранятся в качестве псевдонимов для обратной совместимости. Обычно это плохая идея использовать такие псевдонимы, так как они могут быть связаны с устареванием или переименованием, что приведет к непереносимым сценариям.
Итак, назовите меня параноиком, но dieв будущем этого может и не быть .
Он также говорит, что в некоторых случаях нет предпочтительного имени среди нескольких, is_int()и is_integer()одинаково хороши, например. Глядя на php-srcисторию коммитов на GitHub, die()конструкция была в PHP по крайней мере с 1999 года, когда она была преобразована в репозиторий SVN, и, вероятно, до тех пор, пока существует язык. Кажется абсурдом представить, что это когда-либо будет осуждается.
Марк Амери
2
@MarkAmery, в то время как его предпосылки не приводят к его заключению, сам вывод верен: ~ "Назовите меня параноиком, но exitв будущем его может и не быть. Или не может быть dieв будущем"
Pacerier
@Pacerier Совершенно верно. В будущем, возможно, не будет PHP, поэтому давайте все бросим эту программу и станем гробовщиками или сборщиками налогов. В конце концов, нет ничего, кроме смерти и налогов.
Марк Амери
@MarkAmery, «Нет PHP в будущем», похоже, выше среднего параноика. История показала, что безумно популярные языки не так легко отмирают (Фортран!).
Pacerier
1
Не будь параноиком. выход никогда не умрет . :)
дольмен
10
Этот вывод https://3v4l.org демонстрирует, что die и exit функционально идентичны.
Эта статья просто странная; из определения сканера вы можете сказать, что они эквивалентны; если есть какая-то разница, возможно, тест был выполнен без opcache.
Ja͢ck
Статья посвящена тесту, который невозможно воспроизвести, поскольку код не опубликован. Просто игнорируй это.
дольмен
0
Функционально они идентичны. Поэтому выбирать, какой из них использовать, - это личное предпочтение. Семантически на английском они разные. Die звучит отрицательно. Когда у меня есть функция, которая возвращает данные JSON клиенту и завершает программу, может быть ужасно, если я вызову эту функцию jsonDie (), и более уместно назвать ее jsonExit (). По этой причине я всегда использую выход вместо смерти.
Да, и я отвечал только на этот вопрос. Однако, чтобы знать, вопрос не в разнице только в функциональности.
Ло Цзюн Хуэй
Одна из моих самых любимых функций называется pd () - что означает «Пожалуйста, умри». Так что я не уверен, что умирать - это плохо в таком контексте :)
Иван Пономарев
Как разработчик полного стека, я вижу себя не только программистом, но и дизайнером пользовательского опыта. И в этом контексте симпатия важна. Сочувствие влияет не только на то, как я проектирую пользовательский интерфейс, но и на то, как я пишу код.
Ло Цзюн Хуэй
0
Из того, что я знаю, когда я смотрю на этот вопрос здесь
Там говорится, что «в PHP есть четкое различие в выводе заголовка. В приведенных ниже примерах я решил использовать другой заголовок, но для того, чтобы показать разницу между exit () и die (), которая не имеет значения», и проверено (лично)
По крайней мере, я заметил в своих сценариях, что exit () остановит исполняемый в данный момент сценарий и передаст управление любому вызывающему сценарию, а die остановит php на своих треках. Я бы сказал, что это довольно большая разница?
@AdarshMadrecha это не правда. Если они находятся внутри или снаружи подфункции, скрипт php всегда останавливается.
MERT DOĞAN
-5
Результат функций exit () и die () всегда одинаков. Но, как объясняется на странице справки по псевдониму ( http://php.net/manual/en/aliases.php ), говорится, что функция die () вызывает функцию выхода. Я думаю, что это жестко, как показано ниже:
functiondie($msg){exit($msg);}
Это не проблема производительности для малых, средних и крупных проектов, но если в проекте есть миллиарды, умноженные на миллиарды, умноженные на миллиарды процессов, это очень важное состояние оптимизации производительности.
Но большинство людей не думают, что это проблема, потому что если у вас так много процессов, вы должны думать о большем количестве проблем, чем если бы функция была хозяином или псевдонимом.
Но точный ответ таков; всегда мастер-функция быстрее, чем псевдоним.
В заключение; На странице руководства Alias написано, что вы больше не можете использовать die. Это только псевдоним, и он не рекомендуется.
Обычно это плохая идея использовать такие псевдонимы, так как они могут быть связаны с устареванием или переименованием, что приведет к непереносимым сценариям. Этот список предназначен для тех, кто хочет обновить свои старые сценарии до более нового синтаксиса.
Псевдоним не является «вызовом функции». Проверьте свои предположения, прежде чем разрабатывать гипотезу.
дольмен
@dolmen Aliases всегда вызывает основные функции в жестких кодах. Это общее правило программирования.
MERT DOĞAN
@ MERTDOĞAN Псевдоним ничего не вызывает. Псевдоним (в программировании или в реальной жизни) - это просто другое имя объекта (у которого уже есть имя). die()это не отдельная функция. Это просто другое имя exit(). Этот ответ содержит неверные утверждения о псевдонимах и их производительности.
Аксиак
docs.php.net/manual/en/… Псевдонимы всегда называются так же, как в примере выше. Узнай что-нибудь и возвращайся.
MERT DOĞAN
-10
Они звучат примерно одинаково, однако exit () также позволяет вам установить код выхода вашего PHP-скрипта.
Обычно это вам не нужно, но при написании консольных PHP-скриптов вы можете проверить, например, с помощью Bash, правильно ли скрипт завершил все.
Затем вы можете использовать exit () и поймать это позже. Die () однако не поддерживает это.
Die () всегда существует с кодом 0. Поэтому, по сути, команда die () выполняет следующее:
Это не правда. dieи exitидентичны (они производят один и тот же токен парсера ( T_EXIT) и выполняются одним и тем же кодом). Если параметр является целым числом, он вернет этот код в оболочку. Если это не так, он выведет его и вернет 0. Таким образом, dieи exitбуквально псевдонимы друг для друга.
ircmaxell
6
хорошо, если вы знаете, что вы можете использовать выход ("Я выхожу ...");
Юда Prawira
4
23 ответа пока что за ответ, который просто ложный! Вот почему я никогда не голосую за ответы, пока не прочту все конкурирующие ответы на вопрос и не пойму их все (за исключением ужасно написанных, которые я не могу понять).
Марк Амери
3
Именно об этом @GeoffreyHale пишет в своем ответе. То, что вы разместили в качестве ответа, - это то, что можно ожидать от такого языка, как Perl или C. Но, как упоминали другие, это не относится к php. Вы действительно можете изменить свой ответ, чтобы отразить это, или удалить его в противном случае.
so exit() is exit and die() is also exit :)
Ответы:
Там нет разницы - они одинаковы.
Руководство по PHP для
exit
:Руководство по PHP для
die
:источник
die
для остановок, связанных с ошибками, иexit
для всех других сценариев. Кажется, что при чтении кода это выглядит лучше.die
писать гораздо быстрее, чемexit
... Я начинаю использовать,exit
потому что он более читабелен для не-PHP-программистов, ноdie
просто быстрее печатать, когда вы находитесь в спешка. Кроме того, по тому, как я печатаю, мне не нужно менять положение рук, чтобы писатьdie
.РАЗНИЦА В ПРОИСХОЖДЕНИИ
Разница между
die()
иexit()
в PHP заключается в их происхождении .exit()
отexit()
в C .die()
это изdie
в Perl .ФУНКЦИОНАЛЬНО ЭКВИВАЛЕНТ
die()
иexit()
являются эквивалентными функциями.Руководство по PHP
Руководство по PHP для
die
:Руководство по PHP для
exit
:Руководство по PHP для списка псевдонимов функций :
РАЗНЫЕ В ДРУГИХ ЯЗЫКАХ
die()
иexit()
имеют разные на других языках , но в PHP они идентичны.Из еще одной PHP-разглагольствования :
источник
exit()
не закрывает соединение, а закрываетdie()
, кажется актуальным.Как указано выше, эти две команды создают один и тот же токен синтаксического анализатора.
НО
Есть небольшая разница, и это то, сколько времени занимает парсер, чтобы вернуть токен.
Я не изучал синтаксический анализатор PHP, но если это длинный список функций, начинающийся с «d», и более короткий список, начинающийся с «e», то должен быть временной штраф при поиске имени функции для функций, начинающихся с « е». И могут быть другие различия из-за того, как проверяется полное имя функции.
Я сомневаюсь, что это будет измеримо, если у вас нет «идеальной» среды, предназначенной для разбора PHP, и большого количества запросов с различными параметрами. Но должна быть разница, ведь PHP - интерпретируемый язык.
источник
Руководство по PHP на die :
Вы даже можете сделать
die;
то же самое, что иexit;
- с паренсом или без него.Единственное преимущество выбора
die()
болееexit()
, может быть время вы сэкономить на вводе дополнительного письма ;-)источник
php -a
)die;
,die();
,exit;
иexit();
не имеет никакого эффекта, в то время какexit
(без запятой) выходит в интерактивном режиме.Как и все другие правильные ответы говорит,
die
иexit
являются идентичными / псевдонимами.Хотя у меня есть личное соглашение, что когда я хочу прекратить выполнение скрипта, когда это ожидается и желательно, я использую
exit;
. И когда мне нужно завершить выполнение из-за некоторых проблем (не удалось подключиться к БД, не удается записать в файл и т. Д.), Я используюdie("Something went wrong.");
«убить» сценарий.Когда я использую выход:
Когда я использую die:
Таким образом, когда я вижу
exit
какой-то момент в моем коде, я знаю, что в этот момент я хочу выйти, потому что логика заканчивается здесь. Когда я вижуdie
, я знаю, что хотел бы продолжить выполнение, но я не могу или не должен из-за ошибки в предыдущем выполнении.Конечно, это работает только при работе над проектом в одиночку. Когда будет больше людей, никто не будет мешать им пользоваться
die
илиexit
там, где это не соответствует моим правилам ...источник
Вот кое-что, что довольно интересно. Хотя
exit()
иdie()
эквивалентны,die()
закрывает связь.exit()
не закрывает соединениеdie()
:exit()
:Результаты:
exit()
:die()
:Просто нужно учитывать это для вашего проекта.
Кредиты: https://stackoverflow.com/a/20932511/4357238
источник
exit
иdie
работаю одинаково, они оба закрывают связь.По функциональности они идентичны, но я использую их в следующих сценариях, чтобы сделать код читабельным:
Используйте die (), когда возникает ошибка и необходимо остановить выполнение.
например
die( 'Oops! Something went wrong' );
Используйте exit (), когда нет ошибки и необходимо остановить выполнение.
например
exit( 'Request has been processed successfully!' );
источник
На этой странице написано,
die
что это союзникиexit
, поэтому они идентичны. Но также объясняет, что:Итак, назовите меня параноиком, но
die
в будущем этого может и не быть .источник
is_int()
иis_integer()
одинаково хороши, например. Глядя наphp-src
историю коммитов на GitHub,die()
конструкция была в PHP по крайней мере с 1999 года, когда она была преобразована в репозиторий SVN, и, вероятно, до тех пор, пока существует язык. Кажется абсурдом представить, что это когда-либо будет осуждается.exit
в будущем его может и не быть. Или не может бытьdie
в будущем"Этот вывод https://3v4l.org демонстрирует, что die и exit функционально идентичны.
источник
Они по сути одинаковы, хотя эта статья предполагает иное.
источник
Функционально они идентичны. Поэтому выбирать, какой из них использовать, - это личное предпочтение. Семантически на английском они разные. Die звучит отрицательно. Когда у меня есть функция, которая возвращает данные JSON клиенту и завершает программу, может быть ужасно, если я вызову эту функцию jsonDie (), и более уместно назвать ее jsonExit (). По этой причине я всегда использую выход вместо смерти.
источник
Из того, что я знаю, когда я смотрю на этот вопрос здесь
Там говорится, что «в PHP есть четкое различие в выводе заголовка. В приведенных ниже примерах я решил использовать другой заголовок, но для того, чтобы показать разницу между exit () и die (), которая не имеет значения», и проверено (лично)
источник
В викторине w3schools: функции die () и exit () делают одно и то же? мой ответ неверен Это неверный ответ. Правильный ответ верен.
Вот скриншот:
источник
По крайней мере, я заметил в своих сценариях, что exit () остановит исполняемый в данный момент сценарий и передаст управление любому вызывающему сценарию, а die остановит php на своих треках. Я бы сказал, что это довольно большая разница?
источник
Результат функций exit () и die () всегда одинаков. Но, как объясняется на странице справки по псевдониму ( http://php.net/manual/en/aliases.php ), говорится, что функция die () вызывает функцию выхода. Я думаю, что это жестко, как показано ниже:
Это не проблема производительности для малых, средних и крупных проектов, но если в проекте есть миллиарды, умноженные на миллиарды, умноженные на миллиарды процессов, это очень важное состояние оптимизации производительности.
Но большинство людей не думают, что это проблема, потому что если у вас так много процессов, вы должны думать о большем количестве проблем, чем если бы функция была хозяином или псевдонимом.
Но точный ответ таков; всегда мастер-функция быстрее, чем псевдоним.
В заключение; На странице руководства Alias написано, что вы больше не можете использовать die. Это только псевдоним, и он не рекомендуется.
источник
die()
это не отдельная функция. Это просто другое имяexit()
. Этот ответ содержит неверные утверждения о псевдонимах и их производительности.Они звучат примерно одинаково, однако exit () также позволяет вам установить код выхода вашего PHP-скрипта.
Обычно это вам не нужно, но при написании консольных PHP-скриптов вы можете проверить, например, с помощью Bash, правильно ли скрипт завершил все.
Затем вы можете использовать exit () и поймать это позже. Die () однако не поддерживает это.
Die () всегда существует с кодом 0. Поэтому, по сути, команда die () выполняет следующее:
Который так же, как:
источник
die
иexit
идентичны (они производят один и тот же токен парсера (T_EXIT
) и выполняются одним и тем же кодом). Если параметр является целым числом, он вернет этот код в оболочку. Если это не так, он выведет его и вернет 0. Таким образом,die
иexit
буквально псевдонимы друг для друга.