美文网首页
closure 中 $this 的作用域

closure 中 $this 的作用域

作者: 龙权 | 来源:发表于2016-04-21 10:22 被阅读96次

如代码:

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 的作用域

    如代码: 打印 $this 的时候, 可以打印该对象本身, $var, 就需要 use 才能使用. ab 大神:...

  • Python函数

    函数作用域LEGB LEGB:L>E>G>B 闭包 Closure:内部函数中对enclosing作用域的变量进行...

  • 闭包

    首先是作用域链的概念 作用域链 闭包 A closure is the combination of a func...

  • 为什么可选类型的closure参数不需要加@escaping

    在传参时,如果closure参数是在当前函数作用域执行完之前调用的,closure是非逃逸闭包;如果是在作用域以外...

  • javascript 闭包

    什么闭包(closure) 简单来说,在JavaScript中闭包让我们可以在内部函数中访问其外部函数的作用域...

  • JS中的闭包机制一

    //借鉴了阮一峰大神的闭包日志,谢谢! 要理解闭包(closure),首先需要掌握的是JS中的作用域吗,变量的作用...

  • 请解释python中的闭包

    闭包(closure)的概念 闭包是指延伸了作用域的函数,此作用域中的变量声明周期和函数一样,即使离开创建的作用域...

  • 作用域及闭包(closure)

    作用域:1. 全局 作用域链:函数嵌套 闭包(Closure)函数嵌套,在内嵌函数中使用到外部函数的局部变量(即内...

  • Javascript闭包理解

    何为闭包? 闭包(Closure)是一个封闭的作用域,它可以访问外部作用域的变量。 说起来比较抽象,实际上闭包就是...

  • 简谈Python中的闭包

    闭包是指延伸了作用域的函数,其中包含函数定义体中引用、但是不在定义体中定义的非全局变量。闭包(closure)是函...

网友评论

      本文标题:closure 中 $this 的作用域

      本文链接:https://www.haomeiwen.com/subject/bdizlttx.html