首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >register_shutdown_function覆盖

register_shutdown_function覆盖
EN

Stack Overflow用户
提问于 2012-02-24 21:51:51
回答 5查看 2.2K关注 0票数 6

是否可以覆盖已设置的register_shutdown_function堆栈?类似于:

代码语言:javascript
复制
function f1(){
    echo "f1";
}
function f2(){
    echo "f2";
}
register_shutdown_function("f1");
echo "actions here";
register_shutdown_function("f2");
call_to_undefined_function(); // to "produce" the error

在本例中,我希望脚本只调用f2()。这个是可能的吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-24 21:57:49

这是不可能的。PHP有一个userland PHPAPI函数,但这不会暴露给remove_user_shutdown_function代码。

票数 3
EN

Stack Overflow用户

发布于 2014-07-17 15:19:26

你不能直接这么做,但是总有一个变通的办法:

代码语言:javascript
复制
$first = register_cancellable_shutdown_function(function () {
    echo "This function is never called\n";
});

$second = register_cancellable_shutdown_function(function () {
    echo "This function is going to be called\n";
});

cancel_shutdown_function($first);

输出:

代码语言:javascript
复制
$ php test.php
This function is going to be called

The code

代码语言:javascript
复制
function register_cancellable_shutdown_function($callback)
{
        return new cancellable_shutdown_function_envelope($callback);
}

function cancel_shutdown_function($envelope)
{
    $envelope->cancel();
}

final class cancellable_shutdown_function_envelope
{
        private $callback;

        public function __construct($callback)
        {
                $this->callback = $callback;
                register_shutdown_function(function () {
                        $this->callback && call_user_func($this->callback);
                });
        }

        public function cancel()
        {
                $this->callback = false;
        }
}
票数 4
EN

Stack Overflow用户

发布于 2012-02-24 21:57:05

register_shutdown_function()上的php doc page

可以对register_shutdown_function()进行多次调用,并且每次调用的顺序与注册时的顺序相同。如果在一个已注册的关闭函数中调用exit(),则处理将完全停止,并且不会调用任何其他已注册的关闭函数。

因此,这意味着如果只想调用函数f2,可以将其传递给异常处理程序中的exit()调用。对register_shutdown_function()的多次调用将按顺序调用所有函数,而不仅仅是最后注册的函数。由于似乎没有任何类型的unregister_shutdown_function(),这就是我的建议。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9431843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档