В чем разница между эхо («выход»);умереть;и умереть («выход») ;? - PullRequest
8 голосов
/ 29 апреля 2011

Я видел, как какой-то код делает это:

if(something){
    echo 'exit from program';
    die;
}
...more code

И другие, которые просто используют die:

if(something)   die('exit from program');
...more code

Есть ли какая-то внутренняя разница в том, когда он завершит программуя должен знать о коде, который идет после этого?etcetera

ОБНОВЛЕНИЕ

Я в основном спрашиваю, является ли это стилем кодирования или существует реальная причина, по которой некоторые кодируются так или иначе.Я не спрашиваю, в чем разница между exit и die.

Ответы [ 7 ]

21 голосов
/ 29 апреля 2011

Нет, разницы нет; они оба напишут "exit" в STDOUT и завершат программу.

Я бы предпочел метод die("exit"), так как он меньше печатает, его легче комментировать и семантически понятнее.

Что касается "скорости", то зачем вам быстрее? Вам нужна ваша программа, чтобы умереть очень быстро?

RE: Ваше обновление

... любая врожденная разница в том, когда она закончит программу ...

Существует нет разницы, присущей или нет. Они идентичны Второй параметр, die('exit'), является одним оператором и поэтому не требует скобок при использовании с оператором if; это не имеет ничего общего с die и не имеет ничего общего с блоками и управлением потоком в языках стиля C.

RE: Ваш комментарий / второе обновление

Каким образом вы die - это вопрос личных предпочтений. Как я уже сказал, они идентичны . Я бы выбрал второй вариант по причинам, перечисленным выше: короче, четче, чище, что, на мой взгляд, «лучше».

Разница между exit и die заключается в том, что exit позволяет вам возвращать ненулевой статус, а die возвращает 0. Ни одна функция не "лучше", они служат различным целям.

1 голос
/ 29 апреля 2011

без разницы.

И зачем спрашивать о разнице в скорости, когда ты умираешь.

0 голосов
/ 02 января 2015

Из руководства php:

Примечание: эта языковая конструкция эквивалентна die ().

Но все же есть разница между die и exit :

Используя die (), вы можете опубликовать строку: die («Произошла ошибка»);

Тот же результат с использованием exit ()

<?php
    echo("An error occurred <br>");
    exit(0);
?>

ИЛИ, если вы используете оболочку cli или unix:

Используя PHP в командной строке, die ("Anпроизошла ошибка ") просто выводит сообщение" Произошла ошибка "в STDOUT и завершает программу с нормальным кодом выхода 0.

<?php
    fwrite(STDERR, "An error occurred \n");
    exit(0); //
?>
0 голосов
/ 29 апреля 2011

В основном это стиль кодирования. Однако, если вы выводите отладочные сообщения, лучше использовать echo, чем die:

echo "The frobnuticator blew up!";
die;

становится

//echo "The frobnusticator blew up!";
die;

Конечно, у вас, скорее всего, будет

if ($debug) echo "The frobnusticator blew up!";
die;

Что гораздо легче (на мой глаз), чем

die($debug?"The frobnusticator blew up!":"");
0 голосов
/ 29 апреля 2011

Языковые конструкции exit() и die() эквивалентны, по крайней мере, в соответствии с руководством по PHP. Я использую exit (), когда эта строка должна быть достигнута, и я хочу, чтобы скрипт остановился в этой точке. Die (), с другой стороны, для ситуаций, которые не должны возникать. Это то, что кажется мне наиболее естественным, вы не должны соглашаться.

0 голосов
/ 29 апреля 2011

Для приведенного вами конкретного примера они равны, поскольку $status является строкой, но, как указано в , руководство говорит, что это не всегда так:

Если status является строкой, эта функция печатает статус непосредственно перед выходом.

Если status является целым числом, это значение будет использоваться в качестве состояния выхода и не будет напечатано.Статусы выхода должны быть в диапазоне от 0 до 254, статус выхода 255 зарезервирован PHP и не должен использоваться.Статус 0 используется для успешного завершения программы.

Так что если вместо 'exit from program' вы хотите вывести, скажем, 42, вам действительно нужно сделать:

echo 42; die();
0 голосов
/ 29 апреля 2011

Есть разница, ребята.DIE () может использоваться с другими ошибочными функциями, тогда как эхо должно быть перехвачено как ошибка или исключение.

$query = mysql_query("SELECT * FROM tablename") OR DIE(mysql_error());

Дает вам немедленную последовательность catch / die

...