PHPのdie()
と関数の違いは何ですか?exit()
どちらも同じ機能を持っていると思いますが、どちらにも何か違うものがあるとは思えません...それは何ですか?
PHPにおけるdie()
との違いは、その起源です。exit()
の PHP マニュアルdie
:
この言語構造は と同等
exit()
です。
の PHP マニュアルexit
:
注: この言語構造は と同等
die()
です。
関数エイリアスのリストに関する PHP マニュアル:
die()
他の言語でexit()
は異なりますが、PHP では同じです。
まだ別のPHP暴言から:
... C および Perl コーダーとして、私は答える準備ができていました。 " しかし、PHP の乱雑な構文の世界にいることを思い出しました。
PHP では、exit() と die() は同じです。
設計者は明らかに「うーん、 C から exit() を借りましょう。そして、Perl からもそのままdie()を使用すれば、Perl の人々はおそらくそれを気に入るはずです。おっと! これで 2 つの exit 関数ができました! 両方が両方になるようにしましょう」と考えました。文字列または整数を引数として取り、それらを同一にすることができます!"
最終的な結果として、これは物事を「簡単」にするのではなく、混乱を招くだけです。C および Perl のコーダーは引き続き exit() を使用して整数の終了値のみをトスし、die() を使用してエラー メッセージをトスし、失敗して終了します。初心者や第一言語としての PHP を使用している人は、おそらく「うーん、2 つの終了関数のうち、どれを使用すればよいのか?」と疑問に思うでしょう。マニュアルには、exit() と die() がある理由が説明されていません。
一般に、PHP にはこのような奇妙な冗長性がたくさんあります。異なる言語のバックグラウンドを持つ人々にやさしくしようとしますが、そうしているうちに混乱を招く冗長性が生まれます。
前に述べたように、これら2つのコマンドは同じパーサートークンを生成します。
しかし
わずかな違いがあり、それはパーサーがトークンを返すのにかかる時間です。
PHPパーサーについては調べていませんが、「d」で始まる関数の長いリストと「e」で始まる短いリストの場合、「」で始まる関数の関数名を検索するのに時間のペナルティが必要です。 e」。また、関数名全体のチェック方法により、他にも違いがある場合があります。
PHPの解析専用の「完璧な」環境と、さまざまなパラメーターを持つ多くの要求がない限り、測定可能になるとは思えません。しかし、違いがあるに違いありません。結局のところ、PHPはインタプリタ言語です。
他のすべての正解が言うように、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.
ダイを使用する場合:
$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
だから、私をパラノイアと呼んでください、しかし将来的には何もないかもしれません.
この記事では別の方法を提案していますが、基本的には同じです。
機能的には、それらは同じです。したがって、どちらを使用するかは完全に個人的な好みです。英語では意味的に、それらは異なります。Die は否定的に聞こえます。クライアントに JSON データを返し、プログラムを終了する関数がある場合、この関数を jsonDie() と呼ぶとひどい場合があり、jsonExit() と呼ぶ方が適切です。そのため、私は常に死ぬ代わりに出口を使用します。
これらはほぼ同じように聞こえますが、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");
?>