PHPのdie()
関数とexit()
関数の違いは何ですか?
どちらも同じ機能を持っていると思いますが、どちらにも違いがあるのではないでしょうか。それは何ですか。
PHPの- die()
と exit()
の違いは、Originです。
exit()
from exit()
inC .die()
は die
inPerl からです。die
のPHPマニュアル:
この言語構成体は
exit()
と同等です。
exit
のPHPマニュアル:
注:この言語構成体は
die()
と同等です。
関数エイリアスのリスト のPHPマニュアル:
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にはこのような奇妙な冗長性がたくさんあります。異なる言語のバックグラウンドを持つ人々に友好的になろうとしますが、そうすることで混乱を招く冗長性が生じます。
前述のように、これら2つのコマンドは同じパーサートークンを生成します。
しかし
わずかな違いがあります、そしてそれはそれがトークンを返すのにパーサがかかる時間です。
私はPHPパーサーを研究しませんでした、しかしそれが "d"で始まる関数の長いリストと "e"で始まるより短いリストであるならば、関数を探すのに時間の不利があるに違いありません"e"で始まる関数の名前。また、関数名全体をどのようにチェックするかによって、他の違いがあるかもしれません。
PHPの構文解析専用の「完璧な」環境と、さまざまなパラメーターを使用した多くの要求がない限り、私はそれが測定可能であるとは思えません。しかし違いがあるに違いありません、結局、PHPはインタープリター言語です。
die :のPHPマニュアル
die - 終了することと同等
die;
をexit;
と同じ方法で行うこともできます - 親の有無にかかわらず。
die()
よりexit()
を選ぶことの唯一の利点は、あなたが余分な文字をタイプすることに暇な時間かもしれません;-)
他のすべての正しい答えが言うように、die
とexit
は同一/別名です。
私は個人的な慣習を持っていますが、スクリプトの実行が予期されたとおりに終了したいときは、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
が表示されたら、実行を継続したいと思いますが、前回の実行でエラーが発生したためにできない、または生じないはずです。
もちろん、これはプロジェクトだけで作業している場合にのみ機能します。私の規約に合わない人がdie
やexit
を使うのを妨げる人が他にいないのであれば...
このページ は、die
はexit
のエイリアスであると言っているので、それらは同一です。しかしまた説明します:
aPIのクリーンアップなどの理由で名前を変更した関数があり、古い名前は下位互換性のためのエイリアスとしてのみ残されています。陳腐化や名前の変更に縛られる可能性があるため、これらの種類のエイリアスを使用するのは通常お勧めできません。
それで、私を妄想と呼んでください、しかし将来的にはdie
ingがないかもしれません。
これはかなり面白いものです。 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://3v4l.org からのこの出力は、dieとexitが機能的に同じであることを示しています。
この 記事 はそれ以外は示唆しているが、それらは本質的に同じである。
機能的には同じですが、コードを読みやすくするために次のシナリオで使用します。
エラーが発生して実行を停止する必要がある場合は、 "die"を使用してください。
例えば die( 'Oops! Something went wrong' );
エラーがなく実行を停止する必要がある場合は、 "exit"を使用してください。
例えば exit( 'Request has been processed successfully!' );
コマンドラインを使うとき
die("Error");
STDOUTに "Error"を出力し、エラーコード0で終了します。
エラーコード1で終了したい場合は、次の手順に従ってください。
fwrite(STDERR, "Error");
exit(1);
これは、コマンドラインまたはシェルスクリプトからphpスクリプトを実行しているときに便利であり、スクリプトがゼロ以外の終了コードで終了したかどうかを確認したい場合があります。 Quora からcharanjeetの回答をコピーした
die()とexit()の両方の関数は互いに同等です。主な違いは、exit()はスクリプトを停止しますが、出力を印刷することです。しかしdie()はスクリプトの実行を直接停止します。
私がこの質問を見るとき私が知っていることから ここ
「PHPでは、ヘッダーの出力には明らかな違いがあります。以下の例では、異なるヘッダーを使用することにしましたが、exit()とdie()の違いを示しても問題はありません)。そして(個人的に)テスト済み