在PHP 5.4.0之前在PHP隐式函数中使用$ this

时间:2013-06-25 21:04:42

标签: php closures

根据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死于“致命错误:函数名必须是字符串”。)

3 个答案:

答案 0 :(得分:4)

应该做的工作:

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

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

有时使用$self$that这样的varname会更好。所以更清楚。

答案 1 :(得分:1)

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

(可能与call_user_func()合并)

答案 2 :(得分:0)

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

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

或者如果在当前类之外触发回调。

$callback($myClassInstance);