closure 中 $this 的作用域

如代码:

class Demo{
     public function test(){
         $var = 'var';
         call_user_func(function(){
             var_dump($this);
             //var_dump($var);
         });     
    }
}
(new Demo)->test();<br></br>

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

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

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

是這樣沒錯,之前是一陣子都在學javascript,一直覺得php的closure很怪XD

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

<?php

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會改變closurecontext

Tomoe
修改的评论也不能少于六个字哦!
sodasix
修改的评论也不能少于六个字哦!
安正超
修改的评论也不能少于六个字哦!