Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从子函数中断开父函数(首选PHP)_Php_Python_Function_Break - Fatal编程技术网

从子函数中断开父函数(首选PHP)

从子函数中断开父函数(首选PHP),php,python,function,break,Php,Python,Function,Break,我被问及如何使用PHP中断或结束父函数的执行,而不修改父函数的代码 我想不出任何解决办法,除了死();在子函数中,它将结束所有执行,因此父函数调用之后的任何操作都将结束。有什么想法吗 代码示例: function victim() { echo "I should be run"; killer(); echo "I should not"; } function killer() { //code to break parent here } victim();

我被问及如何使用PHP中断或结束父函数的执行,而不修改父函数的代码

我想不出任何解决办法,除了死();在子函数中,它将结束所有执行,因此父函数调用之后的任何操作都将结束。有什么想法吗

代码示例:

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";

请注意,在以下场景中,异常不起作用:

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()/victor()的上下文之外执行代码,并阻止受害者()正常完成(只有在您将脚本作为错误处理程序的一部分终止时)。

好的,谢谢,出于某种原因,我认为异常会返回受害者();。有没有办法不用try块来做这样的事情?@Fran没有(好吧,也许在内部这是可能的,但这会很麻烦)。你可以在受害者内部处理异常,将受害者包装在另一个处理异常的函数中,或者只在killer中返回一个布尔值,说明执行是否应该继续,并让受害者尊重这一点。这就是我想的,我更好奇的是任何事情。谢谢大家!如果抛出异常,代码执行将移动到堆栈中第一个适用的
catch
块。如果存在non,默认异常处理程序将捕获它并停止整个脚本。因此,在使用异常时,需要一个
catch
块。我现在想不出别的办法来解决这个“难题”tick函数是模糊的,可能是性能的噩梦,而且文档记录得有些糟糕。但它们允许您有效地执行选择每n个语句的函数。意思是你的嘀嗒函数可以在任何其他函数的执行中执行。无论如何,请有人发布答案!:)请注意,我不喜欢重新定义当前正在运行的函数。:)
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();