7

exit() PHPのドキュメントを見て、私は次のように考えました。

$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
or exit("unable to open file ($filename)");

カップルの質問:

  1. 使用するためにファイルを開く以外の一般的なユースケースは何exit()ですか?
  2. 誰もがこれまでに書いたすべての関数がで終わるわけではないのでexit()、あるコンテキストと他のコンテキストでそれを使用することをどのように知っていますか?
  3. 互換性がif/elseありますか?or/exit
4

4 に答える 4

4

そのコンテキストではor、そのステートメントのinはPHPの論理演算子の1つであり、そのように使用すると、短絡評価のために最初のステートメントが失敗した場合にのみ、2番目のステートメントを実行します。

fopenfalseが返されたため、最初の部分が失敗してからor exitステートメントが実行されます。

それをよりよく理解するために、ここに短絡評価の簡単な説明があります。

$x = 5;
$y = 42;

if ($x == 5 or $y == 42) {
    echo "x or y is true";
}

上記のコードでは$y == 42、最初の式がtrueであるため必要がないため、式が評価されることはありません。

その例では、を呼び出すステートメントを評価するかどうかを決定するために同じロジックを使用していますexit

あなたの質問に対処するには:

  1. プログラムが非常に具体的でない限り、ファイルを開くことが失敗したときにexitを使用しませんでした。エラーをログに記録してから、呼び出し元にエラーを返して、呼び出し元が何をすべきかを判断できるようにすることをお勧めします。
  2. いつ使用exitするかは、作成しているコードによって異なります。
  3. 短絡についての説明を考えると、そうです、それらはその意味で交換可能です。の使用or exitは、を使用するよりも少し短いですif/else

お役に立てば幸いです。

于 2012-07-15T21:37:43.053 に答える
4
  1. CLIスクリプト、exitは、成功または何らかの形式のエラーを示すためにコンソールにフィードバックされる整数パラメーターを取ることができます
  2. 例外が優先されるため、アプリケーションコードで使用exit()する傾向はありません。die()ただし、個人的には少し複雑すぎるかもしれません...スクリプトの実行が停止するため、スクリプトを強制終了する必要がある場合に使用してください。正直なところ、私はほとんどの場合、デバッグ時に実行中にスクリプトを強制終了するだけであり(1回限りのブレークポイント)、それも理想的ではありません(ここでも例外がより良い仕事をします)。
  3. の使用orはほとんど便利です。ここに興味深い点があります...

どして

$resource = mysql_connect() || die('dead') 

うまくいかない?

答えは、次のように割り当てが最初に行われるように、=演算子が優先されるということです。このように、それはまさにそれをするのと同じですor($resource = mysql_connect()) or die()if(!($resource = mysql_connnect())) { die() }

于 2012-07-15T21:42:35.777 に答える
2

exit()ユーザーの観点からエラーを処理するのは本当に醜い方法なので、私はまったく使用しない傾向があります。

それを使用する必要がある場合は、回復不可能なエラーが候補になります。たとえば、データベースクエリまたは接続の失敗、またはリモート要求の失敗。

if/elseと同等...or whatever()です。それは単なるスタイルのものであり、後者の形式はより簡潔です。

于 2012-07-15T21:36:35.850 に答える
1

exit実行していた関数が失敗した場合にコードを続行できない状況で使用すると思います。たとえば、必要なファイルを読み取る。

于 2012-07-15T21:35:38.483 に答える