PHP中的“this”上下文在匿名函数中

时间:2014-03-01 09:59:04

标签: php

我试图在我的匿名函数中调用“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

3 个答案:

答案 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);
});

?>