我试图在我的匿名函数中调用“this”上下文,在对象内部调用。 我正在运行PHP 5.5.9并且php doc声明“$ this可以在匿名函数中使用。” 少了什么东西?我应该以某种方式注入上下文将函数绑定到对象吗?
<?php
class Example
{
public function __construct()
{}
public function test($func)
{
$func();
}
}
$obj = new Example();
$obj->test(function(){
print_r($this);
});
?>
输出:
PHP Notice: Undefined variable: this on line 18
答案 0 :(得分:2)
嗯,实际上可以在匿名函数中使用$this
。 但是你不能在对象之外使用它,这没有意义。请注意,您在类定义之外定义了匿名函数。那么$this
在这种情况下意味着什么呢?
一个简单的解决方案是在类定义中定义函数,或者将$this
指针作为参数移交给函数。
答案 1 :(得分:0)
解决了这个...它绝对让我感到恐惧,任何其他解决方案(如果存在)都被广泛接受。
<?php
class Example
{
public function __construct()
{}
public function test($func)
{
$func = $func->bindTo($this, $this);
$func();
}
}
$obj = new Example();
$obj->test(function(){
print_r($this);
});
?>
答案 2 :(得分:0)
另一个解决方案是将$ this作为函数的参数,然后通过类$func($this)
中的调用传递它。
<?php
class Example {
…
public function test($func)
{
$func($this);
}
}
$obj = new Example();
$obj->test(function($this) {
print_r($this);
});
?>