PHP闭包函数详解

5年以前  |  阅读数:556 次  |  编程语言:PHP 

匿名函数也叫闭包函数(closures允许创建一个没有指定没成的函数,最经常用作回调函数参数的值。

闭包函数没有函数名称,直接在function()传入变量即可 使用时将定义的变量当作函数来处理


      $cl = function($name){
        return sprintf('hello %s',name);
      }
      echo $cli('fuck')`

直接通过定义为匿名函数的变量名称来调用


    echo preg_replace_callback('~-([a-z])~', function ($match) {
      return strtoupper($match[1]);
    }, 'hello-world');`

使用use


    $message = 'hello';
    $example = function() use ($message){
      var_dump($message);
    };
    echo $example();
    //输出hello
    $message = 'world';
    //输出hello 因为继承变量的值的时候是函数定义的时候而不是 函数被调用的时候
    echo $example();
    //重置为hello
    $message = 'hello';
    //此处传引用
    $example = function() use(&$message){
     var_dump($message);
    };
    echo $example();
    //输出hello
    $message = 'world';
    echo $example();
    //此处输出world
    //闭包函数也用于正常的传值
    $message = 'hello';
    $example = function ($data) use ($message){
      return "{$data},{$message}";
    };

    echo $example('world');

example


    class Cart{
      //在类里面定义常量用 const 关键字,而不是通常的 define() 函数。
      const PRICE_BUTTER = 1.00;
      const PRICE_MILK  = 3.00;
      const PRICE_EGGS  = 6.95;

      protected $products = [];
      public function add($product,$quantity){
        $this->products[$product] = $quantity;
      }
      public function getQuantity($product){
        //是否定义了
        return isset($this->products[$product])?$this->products[$product]:FALSE;
      }
      public function getTotal($tax){
        $total = 0.0;
        $callback = function($quantity,$product) use ($tax , &$total){
          //constant 返回常量的值
          //__class__返回类名
          $price = constant(__CLASS__."::PRICE_".strtoupper($product));

          $total += ($price * $quantity)*($tax+1.0);
        };
        //array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数
        array_walk($this->products,$callback);
        //回调匿名函数
        return round($total,2);

      }
    }


    $my_cart = new Cart();
    $my_cart->add('butter',1);
    $my_cart->add('milk',3);
    $my_cart->add('eggs',6);


    print($my_cart->getTotal(0.05));

以上就是关于PHP闭包函数的相关内容,希望对大家的学习有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例