首页 > 代码库 > php中Closure::bind用法(手册记录)
php中Closure::bind用法(手册记录)
手册中 Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域。
具体参数可以看手册,这里记录下这个方法的实际用处.
1 <?php 2 3 trait MetaTrait 4 { 5 private $methods = []; 6 7 public function addMethod($methodName,$methodCallable) 8 { 9 if (!is_callable($methodCallable))10 throw new InvalidArgumentException(‘Second param must be callable‘);11 12 //改变作用域到 get_called_class 的对象13 $this->methods[$methodName] = Closure::bind($methodCallable, $this, get_called_class());14 15 }16 17 public function __call($methodName, array $args)18 {19 if (isset($this->methods[$methodName])){20 return call_user_func_array($this->methods[$methodName],$args);21 }22 23 throw new RuntimeException(‘There is no method with the given name to call‘);24 25 }26 27 }28 29 class HackThursday30 {31 use MetaTrait;32 33 private $dayOfWeek = ‘Thursday‘;34 }35 36 37 $test = new HackThursday();38 $test->addMethod(‘when‘,function(){39 return $this->dayOfWeek;40 });41 42 echo $test->when(); //Thursday
其实这个方法就是以前说过的 Closure::bindTo() 的静态版本, 和PHP 使用reflection时的问题,以及解决方案这篇一起看加深理解.
php中Closure::bind用法(手册记录)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。