您好,欢迎访问一九零五行业门户网

PHP Closure类的bind()和bindTo()怎么用?

看php手册关于closure的bind和bindto的用法。真心没看懂,不理解其中的概念。
比如closure::bind ,手册上说“复制一个闭包,绑定指定的$this对象和类作用域”。这该怎么去理解?
闭包和$this是以怎样的形式绑定在一起的?类作用域又是做什么用的?
还有,一个是静态版本,一个是动态版本,这个指的是什么?
能否用给出的示例解释一下这些概念呢?
ifoo;};$bcl1 = closure::bind($cl1, null, 'a');$bcl2 = closure::bind($cl2, new a(), 'a');echo $bcl1(), \n;echo $bcl2(), \n;?>

谢谢
回复内容: 看php手册关于closure的bind和bindto的用法。真心没看懂,不理解其中的概念。
比如closure::bind ,手册上说“复制一个闭包,绑定指定的$this对象和类作用域”。这该怎么去理解?
闭包和$this是以怎样的形式绑定在一起的?类作用域又是做什么用的?
还有,一个是静态版本,一个是动态版本,这个指的是什么?
能否用给出的示例解释一下这些概念呢?
ifoo;};$bcl1 = closure::bind($cl1, null, 'a');$bcl2 = closure::bind($cl2, new a(), 'a');echo $bcl1(), \n;echo $bcl2(), \n;?>

谢谢
不知道你有没有用过js中的call或者apply, 有点类似.
其实就是把闭包当成对象的成员方法或者静态成员方法.
closure::bind($cl1, null, 'a'); //就相当于在类里面加了个静态成员方法closure::bind($cl2, new a(), 'a'); //相当于在类里面加了个成员方法
成员方法中使用$this访问对象, 静态成员方法直接使用类名::成员的方法.
但是因为是匿名函数, 没有函数名, 所以返回一个已经绑定$this对象和类作用域的闭包给你使用.
其它类似信息

推荐信息