如代码:
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