PHP の die() と exit() の本当の違いは何ですか? die はメモリを終了して解放することを意味し、exit はメモリを終了するが解放しないことを意味することをバイドゥで発見しました。これは本当に当てはまりますか?
die 関数と exit 関数の違いをオンラインで検索すると、ほとんどの「標準的な回答」では、die は終了してメモリを解放し、exit は終了するがメモリは解放しないと述べています。
この説明は明らかに間違っています。PHP マニュアルにはすでに「die — exit() と同等です。この言語構造は exit() と同等です。」と記載されています。この 2 つは単なるエイリアスであり、それ以外はまったく同じです。
しかし、私はまだ興味があったので、PHP がこの「エイリアス」をどのように処理するかを確認するためにソース コードから手がかりを探すことにしました。
まず、明確にしておきますが、Die と exit は両方とも「言語構造体」であり、関数ではありません。また、戻り値のあるものは関数であり、戻り値のないものは関数であると主張する人もいます。多くの初心者は言語の構造を理解できません。平たく言えば、言語の構造は文法そのものの記号として理解できるということです。 +、-、*、/ なども言語構造であり、if、else、for、while などもすべて言語構造です。文法自体の一部です。どの言語にもこれらの要素は含まれます。これは、コンピューターが + を見たときに、それを追加する必要があるとは考えないためです。これには、コンパイラがそれをマシンコード (CPU が認識できる命令セット) に変換する必要があります。
PHP がソース コードを実行するときのプロセス全体は、まずソース コード内の echo や if などの言語構造を、zend_ language_scanner.l で定義されている T_ECHO や T_IF などのトークンに変換し、ソース コード内のスペースを削除します。プログラム ロジックと関係のないこれらの文字をコメント アウトします。 、いくつかの短い式が形成されます。これが字句解析の段階です。これらのトークンは、zend_vm_opcodes.h で定義されている操作コードに変換されます。次に、これらの操作コードを 1 つずつ実行します。
上記は、PHPのコンパイルと実行のプロセス、および言語構造の定義を大まかに説明しています。本題に入りましょう。
PHP には、implode や join などのエイリアス関数が多数あることも覚えておく必要があります。エイリアス関数にしても、エイリアス言語の構造にしても、実際の効果という観点では同じですが、ソースコードの処理方法が決定的に異なります。
まず、このエイリアス言語構造がどのように処理されるかを見てから、後でエイリアス関数を見てみましょう。
zend_ language_parser.c はマクロ
#define T_EXIT 300
を定義し、また
enum yytokentype { … T_EXIT = 300, …. }
を含む enum も定義します。ここでは、T_EXIT トークンのコードが 300 であることがわかります。
これらのコード行が含まれている zend_ language_scanner.l を見てください。
<ST_IN_SCRIPTING>”exit” { return T_EXIT; } <ST_IN_SCRIPTING>”die” { return T_EXIT; }
明らかに、php が字句解析を行うとき、exit に遭遇したか、または die に遭遇したかに関係なく、T_EXIT トークンを返します。ここから、die と exit と PHP の内部処理がまったく同じであることが証明できます。
次の PHP コードを使用して判断することもできます:
<?php var_dump(token_get_all(“<?php die;exit;?>”));
返された結果の die と exit に対応するトークン コードは両方とも 300 です。
さて、dieとexitの問題ですが、名前が違うだけで効果は同じであることが皆さんも確認できると思いますが、いわゆるメモリをアンインストールするかアンインストールしないかという問題はありません。
PHP マニュアル: die() exit() と同等。
説明: die() と exit() はどちらもスクリプトの実行を終了する関数です。実際、exit と die の 2 つの名前は同じ関数を指し、die() は exit() 関数の別名です。この関数は、プログラムまたは文字列によって返される値であるパラメータを 1 つだけ受け入れます。あるいはパラメータを入力できず、結果は戻り値になりません。
参考: この 2 つは同じですが、通常の使用には微妙な選択性があります。例:
exit 関数と die 関数に渡される値が 0 の場合、通常は exit() という名前を使用して、スクリプトの実行を早期に終了することを意味します。
echo "1111"; exit(0); echo "2222"; //22222不会被输出,因为程序运行到exit(0)时,脚本已经被提前终止,“马上断气”。
プログラムにエラーが発生した場合、通常は die() という名前を使用してシステム端末にそのまま出力される文字列を渡すことができます。
$fp=fopen("./readme.txt","r") or die("不能打开该文件");
この場合、fopen 関数が呼び出され、ブール値 false が返された場合、die() はすぐにスクリプトを終了し、渡された文字列をすぐに出力します。死ぬよ。」
以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。 H 関連する推奨事項:
Php 推荐+MySQL 実装 メッセージキューメソッド分析🎜mysqlストアドプロシージャと🎜PHP🎜MYSQLストアドプロシージャインスタンスの呼び出し🎜🎜🎜🎜🎜の詳細説明🎜🎜🎜🎜
以上がphp die() と exit() の違いの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。