3

根据http://php.net/manual/en/functions.anonymous.php,在 PHP 5.3$this中无法从隐式函数内部访问,即使该函数是在$this存在的上下文中定义的。有没有办法解决这个限制?(顺便说一下,在 webserver 上升级 PHP 安装是不可能的)

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

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

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

$callback = $this->my_callback

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

4

3 回答 3

4

应该做的工作:

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

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

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

于 2013-06-25T21:10:08.667 回答
1
$function = array($this, 'my_callback');

(也许与 结合call_user_func()

于 2013-06-25T21:05:49.610 回答
0

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

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

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

$callback($myClassInstance);
于 2013-06-25T21:10:08.327 回答