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