回答:
die
、エラー関連の停止およびexit
他のすべてのシナリオのために予約します。コードを読むと、フローが良くなるようです。
die
書くよりもはるかに速いexit
です...私はexit
それがPHP以外のプログラマにとって読みやすいので使い始めていdie
ますが、あなたがいるときにタイプする方が速いだけです急ぎ。また、入力するときに、手を書く位置を変える必要もありませんdie
。
PHPマニュアルdie
:
この言語構造はと同等
exit()
です。
PHPマニュアルexit
:
注:この言語構成はと同等
die()
です。
関数エイリアスのリストの PHPマニュアル:
die()
そして、exit()
されている他の言語で異なりますが、PHPで、彼らは同じです。
... 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にはこのような奇妙な冗長性がたくさんあります。異なる言語のバックグラウンドを持つ人々に親しみやすいように努めていますが、そうすることで混乱を招きます。
exit()
、接続を閉じている間は閉じないと回答しましたdie()
が、それは関連があるようです。
前述のように、これら2つのコマンドは同じパーサートークンを生成します。
だが
小さな違いがあり、それはパーサーがトークンを返すのにかかる時間です。
私はPHPパーサーを研究していませんが、それが「d」で始まる関数の長いリストであり、「e」で始まる短いリストである場合、「 e "。また、関数名全体がどのようにチェックされるかにより、他の違いがある場合があります。
PHPの解析に特化した「完全な」環境と、さまざまなパラメーターを使用した多数のリクエストがない限り、測定可能ではないでしょうか。しかし、違いがあるに違いありません。結局のところ、PHPはインタプリタ言語です。
ダイの PHPマニュアル:
die — exitと同等
あなたもdie;
同じようにすることができますexit;
括弧の有無にかかわらずます。
選択の唯一の利点 die()
以上はexit()
、あなたが余分な文字を入力するに割く時間があるかもしれない;-)
php -a
)die;
、die();
、exit;
とexit();
しながら、何の効果もありませんexit
(セミコロンなし)は、インタラクティブモードを終了します。
他のすべての正しい答えが言うように、die
そしてexit
同じ/エイリアスです。
スクリプトの実行を期待どおりに終了したい場合は、を使用するという個人的な慣習がありますexit;
。また、いくつかの問題(dbに接続できない、ファイルに書き込めないなど)が原因で実行を終了する必要がある場合は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.
私が死ぬとき:
$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
それが私の慣習に合わないところで...
これはかなり興味深いものです。けれどもexit()
とdie()
等価です、die()
クローズ接続を。接続をexit()
閉じません。
die()
:
<?php
header('HTTP/1.1 304 Not Modified');
die();
?>
exit()
:
<?php
header('HTTP/1.1 304 Not Modified');
exit();
?>
結果:
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
プロジェクトでこれを考慮する必要がある場合に備えてください。
exit
そしてdie
、それらの両方の密接な関係と同じように動作します。
機能的には同じですが、コードを読みやすくするために、次のシナリオで使用します。
エラーが発生して実行を停止する必要がある場合は、die()を使用します。
例えば
die( 'Oops! Something went wrong' );
エラーがなく、実行を停止する必要がある場合は、exit()を使用します。
例えば
exit( 'Request has been processed successfully!' );
このページには、言うdie
のaliesあるexit
ので、彼らは同じです。しかし、それも説明します:
APIのクリーンアップなどの理由で名前が変更された関数があり、古い名前は下位互換性のためのエイリアスとしてのみ保持されます。これらの種類のエイリアスは、陳腐化したり名前が変更されたりして、移植できないスクリプトにつながる可能性があるため、通常は使用しないことをお勧めします。
だから、私を偏執狂と呼んでください、しかしdie
将来は何もないかもしれません。
is_int()
そしてis_integer()
例えば同じように良いです。php-src
GitHub のコミット履歴を見ると、die()
少なくとも1999年以降、SVNリポジトリに変換されてから、おそらく言語が存在している限り、PHPに構造が存在します。それが非推奨になることを想像するのはばかげているようです。
exit
将来はないかもしれません。あるいは将来ないかもしれませんdie
」
https://3v4l.orgからのこの出力は、dieとexitが機能的に同じであることを示しています。
機能的には同じです。したがって、どちらを使用するかを選択することは、完全に個人的な好みです。意味的に英語では、それらは異なります。ダイはネガティブに聞こえます。JSONデータをクライアントに返し、プログラムを終了する関数がある場合、この関数をjsonDie()と呼ぶと恐ろしいことがあり、jsonExit()と呼ぶ方が適切です。そのため、私は常に死ぬ代わりに出口を使います。
ここでこの質問を見たときに知っていることから
「PHPでは、ヘッダー出力に明確な違いがあります。以下の例では、異なるヘッダーを使用することを選択しましたが、exit()とdie()の違いは重要ではありません。」テスト済み(個人的に)
少なくとも私のスクリプトで気付いたのは、exit()が現在実行中のスクリプトを停止し、制御を呼び出し元のスクリプトに戻す一方で、dieがphpのトラックを停止することです。それはかなり大きな違いだと思いますか?
exit()関数とdie()関数の結果は常に同じです。しかし、エイリアスのマニュアルページ(http://php.net/manual/en/aliases.php)で説明されているように、die()関数はexit関数を呼び出すと記載されています。私はそれが以下のようにハードコーディングされていると思います:
function die($msg){
exit($msg);
}
これは中小規模のプロジェクトのパフォーマンスの問題ではありませんが、プロジェクトに数十億、数十億、数十億のプロセスがある場合、これは非常に重要なパフォーマンス最適化状態になります。
しかし、非常に多くの人は、これが問題であるとは考えていません。多くのプロセスがある場合、関数がマスターまたはエイリアスである場合よりも、もっと問題を考えなければならないからです。
しかし、正確な答えはそれです。常にマスター機能はエイリアスよりも高速です。
最終的に; Aliasのマニュアルページには、dieはもう使用できないと書かれています。これは単なる別名であり、非推奨です。
これらの種類のエイリアスは、陳腐化したり名前が変更されたりして、移植できないスクリプトにつながる可能性があるため、通常は使用しないことをお勧めします。このリストは、古いスクリプトを新しい構文にアップグレードしたい人のために提供されています。
die()
独立した機能ではありません。の別名ですexit()
。この回答には、エイリアスとそのパフォーマンスに関する誤った記述が含まれています。
ほぼ同じように聞こえますが、exit()を使用すると、PHPスクリプトの終了コードを設定することもできます。
通常、実際にはこれは必要ありませんが、コンソールのPHPスクリプトを作成するときは、スクリプトがすべてを正しく完了したかどうか、たとえばBashで確認することができます。
次に、exit()を使用して、後でキャッチできます。Die()はそれをサポートしていません。
Die()は常にコード0で存在します。基本的に、die()コマンドは次のことを行います。
<?php
echo "I am going to die";
exit(0);
?>
これは次と同じです:
<?php
die("I am going to die");
?>
die
とexit
同じです(同じパーサートークン(T_EXIT
)を生成し、同じコードによって実行されます)。パラメータが整数の場合、そのコードをシェルに返します。そうでない場合は、出力して0を返します。したがってdie
、およびexit
は、文字通りお互いのエイリアスです。
so exit() is exit and die() is also exit :)