我有一个带有静态回调的简单类。但是当我尝试执行回调时,出现以下错误:
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');
?>
有人可以说明一下,这是怎么了?
答案 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');
另一种解决方法是将回调转移到本地变量中
public static function do($arg)
{
$fn = self::$_fn;
$fn($arg);
}
或更短:
public static function do($arg)
{
(self::$_fn)($arg);
}