Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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_Wordpress_Action_Exit - Fatal编程技术网

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

Php 有什么方法可以从内部函数中退出外部函数?,php,wordpress,action,exit,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 go

在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>

这是一些文本。在这段文字之后,我将调用funcA

这是funcA运行后的更多文本

不幸的是,如果我在funcB中发现一些让我想阻止funcA完成的东西,我似乎必须退出整个PHP脚本。这有什么办法吗

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

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

有人有什么建议吗?

funcA
中没有处理的
funcB
中抛出一个
<?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!');
  }
?>
也许

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

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

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>
函数funcA(){ funcB(); echo‘你好,我们完成了funcB’; } 函数funcB(){ 抛出新异常; 回声“这是funcB”; } ?> 这是一些文本。在这段文字之后,我将调用funcA

这是funcA运行后的更多文本


难看,但它在PHP5中工作。

我还建议询问您想在WP上做什么。也许有一个函数或wp_过滤器可以替代。我会在这里和wordpress.stackexchange.com网站上询问。尽管滥用流量控制异常是邪恶的。谢谢你的提示。我应该能让这一切为我所用。我有点希望在不编辑任何模板文件的情况下实现这一点(这是我必须放置try/catch语句的地方),但这是未来的好信息。感谢您的尝试,但正如我在原始帖子中所说,我无法控制构成funcA()的代码,因此,我无法将try/catch语句放入该函数中,然后可以将对funcA()的调用包装到异常处理程序中。