从子函数中破坏父函数(PHP Preferrably)

时间:2010-07-01 01:03:01

标签: php python function break

我遇到了如何在不修改父代码的情况下中断或结束父函数执行的问题,使用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";

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分: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()正常完成(仅当您确实将脚本作为错误处理程序的一部分终止时)。