5

PHPを使用して、親のコードを変更せずに親関数の実行を中断または終了する方法に挑戦しました

die(); 以外の解決策がわかりません。これにより、すべての実行が終了するため、親関数呼び出しの後のすべてが終了します。何か案は?

コード例:

function victim() {
    echo "I should be run";
    killer();
    echo "I should not";
}
function killer() {
    //code to break parent here
}
victim();
echo "This should still run";
4

2 に答える 2

7
function victim() {
    echo "I should be run";
    killer();
    echo "I should not";
}
function killer() {
    throw new Exception('Die!');
}

try {
    victim();
} catch (Exception $e) {
    // note that catch blocks shouldn't be empty :)
}
echo "This should still run";
于 2010-07-01T01:07:08.773 に答える
0

次のシナリオでは例外が機能しないことに注意してください。

function victim() {
  echo "this runs";
  try {
    killer();
  }
  catch(Exception $sudden_death) {
    echo "still alive";
  }
  echo "and this runs just fine, too";
}

function killer() { throw new Exception("This is not going to work!"); }

victim();

他の何かが必要になります。より堅牢な唯一のものは、独自のエラー ハンドラーをインストールし、すべてのエラーがエラー ハンドラーに報告されるようにし、エラーが例外に変換されないようにすることです。次にエラーをトリガーし、完了したらエラーハンドラーにスクリプトを強制終了させます。このようにして、killer()/victim() のコンテキスト外でコードを実行し、victim() が正常に完了するのを防ぐことができます (エラー ハンドラーの一部としてスクリプトを強制終了した場合のみ)。

于 2010-07-01T03:06:48.617 に答える