PHP Closure类的bind()和bindTo()怎么用?
看PHP手册关于Closure的bind和bindTo的用法。真心没看懂,不理解其中的概念。
比如Closure::bind ,手册上说“复制一个闭包,绑定指定的$this对象和类作用域”。这该怎么去理解?
闭包和$this是以怎样的形式绑定在一起的?类作用域又是做什么用的?
还有,一个是静态版本,一个是动态版本,这个指的是什么?
能否用给出的示例解释一下这些概念呢?
<?php
class A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A::$sfoo;
};
$cl2 = function() {
return $this->ifoo;
};
$bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "\n";
echo $bcl2(), "\n";
?>
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不知道你有没有用过
js
中的call
或者apply
, 有点类似.其实就是把闭包当成对象的成员方法或者静态成员方法.
成员方法中使用
$this
访问对象, 静态成员方法直接使用类名::成员
的方法.但是因为是匿名函数, 没有函数名, 所以返回一个已经绑定$this对象和类作用域的闭包给你使用.