有什么方法可以从内部函数中退出外部函数?

时间:2011-04-21 17:09:03

标签: php wordpress action exit

在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。我正在挂钩the get_template_part() function,试图阻止WordPress通过执行钩子后调用的locate_template()函数实际要求/包含文件。

有人有任何建议吗?

4 个答案:

答案 0 :(得分:1)

funcB funcA中未处理的{{1}}内投放exception

答案 1 :(得分:0)

<?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!');
  }
?>

答案 2 :(得分:0)

也许......

这不是一个解决方案,但你可以挂钩另一个在请求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');
?>

答案 3 :(得分:0)

我看到的唯一方法是使用例外:

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>

丑陋,但它适用于PHP5。