如何执行PHP中存储在类的静态变量中的回调?

时间:2019-06-21 00:18:56

标签: php callback

我有一个带有静态回调的简单类。但是当我尝试执行回调时,出现以下错误:

  

E_NOTICE:类型8-未定义变量:_fn-第14行异常:   函数名称必须是字符串

这是我的PHP代码:

<?php

class test
{
    public static $_fn = null;

    public static function setFN(callable $fn)
    {
        self::$_fn = $fn;
    }

    public static function do($arg)
    {
        self::$_fn($arg);
    }
}

test::setFN(function ($arg) {
    echo $arg;
});

test::do('test');

?>

有人可以说明一下,这是怎么了?

1 个答案:

答案 0 :(得分:1)

您可以使用call_user_func来调用存储的函数:

class test
{
    public static $_fn = null;
    public static function setFN(callable $fn)
    {
        self::$_fn = $fn;
    }
    public static function do($arg)
    {
        call_user_func(self::$_fn, $arg);
    }
}

test::setFN(function ($arg) {
    echo $arg;
});

test::do('test');

演示:https://3v4l.org/5tHJI

另一种解决方法是将回调转移到本地变量中

public static function do($arg)
{
    $fn = self::$_fn;
    $fn($arg);
}

演示:https://3v4l.org/7cOaH

或更短:

public static function do($arg)
{
    (self::$_fn)($arg);
}

演示:https://3v4l.org/OhHfI