在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()函数实际要求/包含文件。
有人有任何建议吗?
答案 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。