在PHP 5.4.0之前,PHP中有$ this这个隐式函数

据http://php.net/manual/en/functions.anonymous.php,在PHP 5.3 $this不是来自一个隐函数内部访问,即使该功能在上下文定义$this存在。 有什么办法可以解决这个限制吗? (顺便说一下,升级Web服务器上的PHP安装是不可能的)

我想使用隐式函数的方式是定义一个回调,它是某个对象的成员函数。 更确切地说,我想做类似的事情

$callback = function() { return $this->my_callback(); }

事实上,更好的语法将是事件

$callback = $this->my_callback

但我不能让它工作(当我尝试执行回调时,PHP死于“致命错误:函数名称必须是字符串”)。


应该做的工作:

$object = $this ;
$callback = function() use ($object) { return $object->my_callback(); } ;

use会在其声明到函数作用域时带来一个可访问的变量(在我们的例子中是对象的引用),所以你不必将它作为参数发送。

有时甚至更好地使用像$self$that这样更清晰的varname。


$function = array($this, 'my_callback');

(可能与call_user_func()结合)


看起来你可以将变量传递给回调函数。 我没有在PHP中使用闭包,但我认为这会适用于你:

$callback = function($instance) { return $instance->my_callback(); }
$callback($this);

或者,如果回调是在当前课程之外触发的。

$callback($myClassInstance);
链接地址: http://www.djcxy.com/p/59145.html

上一篇: Have $this in PHP implicit function before PHP 5.4.0

下一篇: Converting code with Anonymous functions to PHP 5.2