web-dev-qa-db-ja.com

PHPのdie()とexit()の違いは何ですか?

PHPのdie()関数とexit()関数の違いは何ですか?

どちらも同じ機能を持っていると思いますが、どちらにも違いがあるのではないでしょうか。それは何ですか。

622
coderex

違いはありません - それらは同じです。

exit :のPHPマニュアル

注:この言語構​​成は die() と同等です。

die :のPHPマニュアル

この言語構​​成は exit() と同等です。

510
Marek Karbarz

起源の違い

PHPの-​​ die()exit() の違いは、Originです。


機能的に同等

die() および exit()と同等の関数です。

PHPマニュアル

die のPHPマニュアル:

この言語構​​成体は exit() と同等です。

exit のPHPマニュアル:

注:この言語構​​成体は die() と同等です。

関数エイリアスのリスト のPHPマニュアル:

die はマスター関数のエイリアスです exit()


他の言語が異なる

die()exit() は他の言語ではが異なりますがPHPでは同一です。

まだPHP rant から:

... CおよびPerlのコーダーとして、「なぜ、exit()は数値の終了ステータスでプログラムを終了するのか、die()はエラーメッセージをstderrに出力してEXIT_FAILUREステータスで終了する」と答える準備ができていました。 」しかし、その後、私たちはPHPの乱雑な構文の土地にいることを思い出しました。

PHPでは、exit()とdie()は同じです。

デザイナは、「うーん、Cから exit() を借りよう。そして Perlからそのままのdie() も使えば、Perlの人々はおそらくそれを好むだろう。おっと!これで2つの終了関数ができました!両方とも文字列または整数を引数として取り、それらを同一にすることができるようにしましょう!」

最終的な結果は、これが実際に物事を「簡単」にせず、より混乱させることです。 CおよびPerlのコーダーは引き続きexit()を使用して整数の終了値のみをトスし、die()を使用してエラーメッセージをトスし、失敗して終了します。初心者やPHPを第一言語とする人々は、「うーん、2つの終了関数、どちらを使うべきですか?」マニュアルには、exit()とdie()がある理由は説明されていません。

一般に、PHPにはこのような奇妙な冗長性がたくさんあります。異なる言語のバックグラウンドを持つ人々に友好的になろうとしますが、そうすることで混乱を招く冗長性が生じます。

206
Geoffrey Hale

前述のように、これら2つのコマンドは同じパーサートークンを生成します。

しかし

わずかな違いがあります、そしてそれはそれがトークンを返すのにパーサがかかる時間です。

私はPHPパーサーを研究しませんでした、しかしそれが "d"で始まる関数の長いリストと "e"で始まるより短いリストであるならば、関数を探すのに時間の不利があるに違いありません"e"で始まる関数の名前。また、関数名全体をどのようにチェックするかによって、他の違いがあるかもしれません。

PHPの構文解析専用の「完璧な」環境と、さまざまなパラメーターを使用した多くの要求がない限り、私はそれが測定可能であるとは思えません。しかし違いがあるに違いありません、結局、PHPはインタープリター言語です。

54
Bob

die :のPHPマニュアル

die - 終了することと同等

die;exit;と同じ方法で行うこともできます - 親の有無にかかわらず。

die()よりexit()を選ぶことの唯一の利点は、あなたが余分な文字をタイプすることに暇な時間かもしれません;-)

39
Levit

他のすべての正しい答えが言うように、dieexitは同一/別名です。

私は個人的な慣習を持っていますが、スクリプトの実行が予期されたとおりに終了したいときは、exit;を使用します。そして、(dbに接続できなかったり、ファイルに書き込めなかったりなど)問題が発生して実行を終了する必要がある場合は、die("Something went wrong.");を使用してスクリプトを "kill"します。

Exitを使うと

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が表示されたら、実行を継続したいと思いますが、前回の実行でエラーが発生したためにできない、または生じないはずです。

もちろん、これはプロジェクトだけで作業している場合にのみ機能します。私の規約に合わない人がdieexitを使うのを妨げる人が他にいないのであれば...

27
Lukas

このページ は、dieexitのエイリアスであると言っているので、それらは同一です。しかしまた説明します:

aPIのクリーンアップなどの理由で名前を変更した関数があり、古い名前は下位互換性のためのエイリアスとしてのみ残されています。陳腐化や名前の変更に縛られる可能性があるため、これらの種類のエイリアスを使用するのは通常お勧めできません。

それで、私を妄想と呼んでください、しかし将来的にはdieingがないかもしれません。

11
Pedram Behroozi

これはかなり面白いものです。 exit()die()は同等ですが、exit() は接続を閉じます die() 接続を閉じません .

exit()

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>

die()

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>

結果:

exit()

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100

die()

HTTP/1.1 304 Not Modified 
Connection: close

あなたのプロジェクトのためにこれを考慮に入れる必要があるだけの場合。

クレジット: https://stackoverflow.com/a/20932511/4357238

7
Edward

https://3v4l.org からのこの出力は、dieとexitが機能的に同じであることを示しています。 enter image description here

6
Simon77

この 記事 はそれ以外は示唆しているが、それらは本質的に同じである。

6
o.k.w

機能的には同じですが、コードを読みやすくするために次のシナリオで使用します。

エラーが発生して実行を停止する必要がある場合は、 "die"を使用してください。

例えば die( 'Oops! Something went wrong' );

エラーがなく実行を停止する必要がある場合は、 "exit"を使用してください。

例えば exit( 'Request has been processed successfully!' );

4
aagjalpankaj

コマンドラインを使うとき

 die("Error");

STDOUTに "Error"を出力し、エラーコード0で終了します。

エラーコード1で終了したい場合は、次の手順に従ってください。

  fwrite(STDERR, "Error");
    exit(1);

これは、コマンドラインまたはシェルスクリプトからphpスクリプトを実行しているときに便利であり、スクリプトがゼロ以外の終了コードで終了したかどうかを確認したい場合があります。 Quora からcharanjeetの回答をコピーした

1
prabhjot

die()とexit()の両方の関数は互いに同等です。主な違いは、exit()はスクリプトを停止しますが、出力を印刷することです。しかしdie()はスクリプトの実行を直接停止します。

0
Vaibhav Ahirrao

私がこの質問を見るとき私が知っていることから ここ

「PHPでは、ヘッダーの出力には明らかな違いがあります。以下の例では、異なるヘッダーを使用することにしましたが、exit()とdie()の違いを示しても問題はありません)。そして(個人的に)テスト済み

0