PHP闭包函数详解

这篇文章主要为大家详细介绍了PHP闭包函数,闭包函数没有函数名称,直接在function()传入变量即可 使用时将定义的变量当作函数来处理,对PHP闭包函数感兴趣的朋友可以参考一下。

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

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

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

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

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

使用use

  1. $message = 'hello';
  2. $example = function() use ($message){
  3. var_dump($message);
  4. };
  5. echo $example();
  6. //输出hello
  7. $message = 'world';
  8. //输出hello 因为继承变量的值的时候是函数定义的时候而不是 函数被调用的时候
  9. echo $example();
  10. //重置为hello
  11. $message = 'hello';
  12. //此处传引用
  13. $example = function() use(&$message){
  14. var_dump($message);
  15. };
  16. echo $example();
  17. //输出hello
  18. $message = 'world';
  19. echo $example();
  20. //此处输出world
  21. //闭包函数也用于正常的传值
  22. $message = 'hello';
  23. $example = function ($data) use ($message){
  24. return "{$data},{$message}";
  25. };
  26. echo $example('world');

example

  1. class Cart{
  2. //在类里面定义常量用 const 关键字,而不是通常的 define() 函数。
  3. const PRICE_BUTTER = 1.00;
  4. const PRICE_MILK = 3.00;
  5. const PRICE_EGGS = 6.95;
  6. protected $products = [];
  7. public function add($product,$quantity){
  8. $this->products[$product] = $quantity;
  9. }
  10. public function getQuantity($product){
  11. //是否定义了
  12. return isset($this->products[$product])?$this->products[$product]:FALSE;
  13. }
  14. public function getTotal($tax){
  15. $total = 0.0;
  16. $callback = function($quantity,$product) use ($tax , &$total){
  17. //constant 返回常量的值
  18. //__class__返回类名
  19. $price = constant(__CLASS__."::PRICE_".strtoupper($product));
  20. $total += ($price * $quantity)*($tax+1.0);
  21. };
  22. //array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数
  23. array_walk($this->products,$callback);
  24. //回调匿名函数
  25. return round($total,2);
  26. }
  27. }
  28. $my_cart = new Cart();
  29. $my_cart->add('butter',1);
  30. $my_cart->add('milk',3);
  31. $my_cart->add('eggs',6);
  32. print($my_cart->getTotal(0.05));

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