closure 中 $this 的作用域

如代码:

class Demo{
    public function test(){
        $var = 'var';
        call_user_func(function(){
            var_dump($this);
            //var_dump($var);
        });
    }
}

(new Demo)->test();

打印 $this 的时候, 可以打印该对象本身, $var, 就需要 use 才能使用.

ab 大神: php 的 closure,里面变量作用域,是 “定义时” 代码所在的作用域。

是否这样理解, $this 的作用域是整个 object, 只要是整个 object 的里, $this 都表示 object 本身, 不论是否在闭包中?

tomoe 大神

還有一點是 closure 中的 $this 在 php5.3 版本是不支援的,會出錯,5.4 以後才支援,至於 $this 是不是都表示 object 本身還是有一些奇特方法會造成其 context (上下文)改變,例如:

class A {
    public $value = "A"; 
    function getClosure() {
        return function() {
            echo $this->value, "\n"; 
        }; 
    }
}

class B {
    public $value = "B";
}
$a = new A();
$b = new B();

call_user_func($a->getClosure()); // 顯示 A
call_user_func($a->getClosure()->bindTo($b, $b)); // 顯示 B

bindTo 會改變 closure 的 context

你可能感兴趣的:(closure 中 $this 的作用域)