zoukankan      html  css  js  c++  java
  • 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 HackThursday
    30 {
    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时的问题,以及解决方案这篇一起看加深理解.

     
  • 相关阅读:
    echarts使用
    Nutch插件系统
    linux命令总结
    linux命令行快捷键
    每日一笔
    Hadoop参数调优
    rsync用于同步目录
    hadoop遇到的问题(汇总)
    linux历史命令
    hadoop 编译代码及运行
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5912508.html
Copyright © 2011-2022 走看看