PHP Closure类的bind()和bindTo()怎么用?
程序员文章站
2022-04-06 18:30:13
...
看PHP手册关于Closure的bind和bindTo的用法。真心没看懂,不理解其中的概念。
比如Closure::bind ,手册上说“复制一个闭包,绑定指定的$this对象和类作用域”。这该怎么去理解?
闭包和$this是以怎样的形式绑定在一起的?类作用域又是做什么用的?
还有,一个是静态版本,一个是动态版本,这个指的是什么?
能否用给出的示例解释一下这些概念呢?
比如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对象和类作用域的闭包给你使用.
推荐阅读
-
PHP用date()获取的时间和本地时间不一致怎么解决?
-
二级缓存和三级缓存 自己用的PHP缓存类
-
node.js - 用基于FIS的Scrat前端框架, 怎么和php的后台合作呢?
-
php使用amf3与flex通讯,所有内容都要写在类和类的函数中么,require(/includes/sq_init.php)不支持么?全局变量也不可以用?
-
php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,该怎么解决,求大神指点,多谢
-
php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,该怎么解决,求大神指点,多谢
-
请问后台的右栏和左栏怎么怎么关联的,用PHP读取写入还是JS?
-
php使用amf3与flex通讯,所有内容都要写在类和类的函数中么,require(/includes/sq_init.php)不支持么?全局变量也不可以用?
-
用正确的小汽车对象学习和熟悉类的概念_PHP教程
-
怎么用PHP执行ORCAL数据库的一条select语句,并获得总行数和某列的值