强制PHP跳过“退出”

时间:2013-10-21 13:18:54

标签: php

是否有一个简短的解决方案来避免执行"退出"语言构造?否则,我将不得不用另一个PHP请求执行我的函数。

示例:main.php

echo 'hello world';
doSomething();
updateSomething();

示例:doSomething.php

function doSomething()
{
$a = 1+1;
exit;
}

示例:updateSomething.php

function updateSomething()
{
$b = 3+5;
exit;
}

但第二个功能永远不会被执行......有一个简单的解决方案吗?我找到了两个现有的主题,没有真正的解决方案。但也许我的例子有聪明的伎俩?

它不是一个真实的例子,在我的例子中,函数代表了一些复杂的方法,这些方法是用ajax reqests调用的,没有return语句。因为该方法来自外部库,所以我无法修改代码。如果可能的话,我想在一个脚本中调用这个库的两个方法:)

并且......我知道return正在做什么,但在我的情况下,我无法修改代码,因为它不是我的代码 - 它来自的代码现有的软件,我只想在自定义脚本中调用这些现有的方法。但是我可以调用其中一种方法,因为每种方法都有exit函数,所以多次调用它们会很棒。

4 个答案:

答案 0 :(得分:3)

简单。从函数中删除exit;

exit()将终止脚本的执行。您可能希望使用return返回调用代码。

答案 1 :(得分:2)

无法跳过或禁用“退出”命令。

如果你想在脚本停止之前做一些事情,你可以使用shutdown-functions或object-destructors ......但我认为你不应该这样做,是吗?

http://www.php.net/manual/en/function.exit.php

答案 2 :(得分:0)

从手册:

  

终止脚本的执行。

exitdie的别名)是脚本的最后一件事。切换到另一种用途

function doSomething()
{
   $a = 1+1;
   return true;
}

答案 3 :(得分:0)

现在是2020年,是一种解决作者希望存在的问题的方法-您可以从PECL(版本5.0.2或更高版本)安装uopz extension,然后使用uopz_allow_exit()功能禁用退出(),例如:

echo 'hello world';

uopz_allow_exit( false );
doSomething();
updateSomething();
uopz_allow_exit( true );

但是请注意,您需要将此配置选项添加到php.ini文件中:

uopz.exit = 1

如果不这样做,默认情况下, 所有exit()调用将在所有地方默认禁用 ,除非已通过uopz_allow_exit()明确启用。

还值得注意的是,此配置选项仅出现在6.0.1版中,至少对我来说,该版本无法在PHP 7.0上安装,而仅在7.2版上可用

哦,根据文档,此扩展名应该用于单元测试,而不是生产。再说一次,它中没有任何内容表明不鼓励在生产中使用此扩展,因此这是您的要求。