任何从内部函数中退出外部函数的方法


Any way to exit outer function from within inner function?

在PHP中,如果我有一个函数调用另一个函数;是否有任何方法可以让被调用函数退出调用函数而不杀死整个脚本?

例如,假设我有一些代码如下:

<?php
function funcA() {
    funcB();
    echo 'Hello, we finished funcB';
}
function funcB() {
    echo 'This is funcB';
}
?>
<p>This is some text. After this text, I'm going to call funcA.</p>
<p><?php funcA(); ?></p>
<p>This is more text after funcA ran.</p>

不幸的是,如果我在funcB中发现一些让我想要阻止funcA完成的东西,我似乎不得不退出整个PHP脚本。还有别的办法吗?

我知道我可以在funcA()中写一些东西来检查funcB()的结果,但是,在我的情况下,我无法控制funcA()的内容;我只能控制funcB()的内容。

让这个例子更具体一点;在这个特殊的例子中,我正在使用WordPress。我钩入get_template_part()函数,并试图阻止WordPress通过locate_template()函数实际要求/包含文件,该函数在我的钩子执行后调用。

有人有什么建议吗?

funcB中抛出funcA无法处理的异常

<?php
  function funcA() {
     try
     {
        funcB();
        echo 'Hello, we finished funcB';
     }
     catch (Exception $e) 
     {
        //Do something if funcB causes an error, or just swallow the exception
     }
  }
  function funcB() {
     echo 'This is funcB';
     //if you want to leave funcB and stop funcA doing anything else, just
     //do something like:
     throw new Exception('Bang!');
  }
?>

我看到的唯一方法是使用异常:

function funcA() {
    funcB();
    echo 'Hello, we finished funcB';
}
function funcB() {
   throw new Exception;
   echo 'This is funcB';
}
?>
<p>This is some text. After this text, I'm going to call funcA.</p>
<p><?php  try { funcA(); } catch (Exception $e) {} ?></p>
<p>This is more text after funcA ran.</p>

也许…

这不是一个解决方案,但你可以挂钩另一个函数被调用时,exit()请求"register_shutdown_function('shutdown');"。以某种方式让事情再次继续或完成,让你满意。

<?php
function shutdown()
{
    // This is our shutdown function, in 
    // here we can do any last operations
    // before the script is complete.
    echo 'Script executed with success', PHP_EOL;
}
register_shutdown_function('shutdown');
?>