PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字。

function getMoney() {
  $rmb = 1;
  $dollar = 6;
  $func = function() use ( $rmb ) {
    echo $rmb;
    echo $dollar;
  };
  $func();
}
   
getMoney();
   
//输出:
//1
//报错,找不到dorllar变量
//可以看到,dollar没有在use关键字中声明,在这个匿名函数里也就不能获取到它,所以开发中要注意这个问题。
//是否可以在匿名函数中改变上下文的变量,但我发现是不可以的
function getMoney() {
  $rmb = 1;
  $func = function() use ( $rmb ) {
    echo $rmb;
    //把$rmb的值加1
    $rmb++;
  };
  $func();
  echo $rmb;
}
   
getMoney();
   
//输出:
//1
//1
# 原来use所引用的也只不过是变量的一个副本而已。但是我想要完全引用变量,而不是复制。
# 要达到这种效果,其实在变量前加一个 & 符号就可以了:
function getMoney() {
  $rmb = 1;
  $func = function() use ( &$rmb ) {
    echo $rmb;
    //把$rmb的值加1
    $rmb++;
  };
  $func();
  echo $rmb;
}
   
getMoney();
   
//输出:
//1
//2
/**
好,这样匿名函数就可以引用上下文的变量了。如果将匿名函数返回给外界,匿名函数会保存use所引用的变量,而外界则不能得到这些变量,这样形成‘闭包'这个概念可能会更清晰一些。根据描述改变一下上面的例子:
*/
function getMoneyFunc() {
  $rmb = 1;
  $func = function() use ( &$rmb ) {
    echo $rmb;
    //把$rmb的值加1
    $rmb++;
  };
  return $func;
}
   
$getMoney = getMoneyFunc();
$getMoney();
$getMoney();
$getMoney();
   
//输出:
//1
//2
//3
 

转载于:https://www.cnblogs.com/jianzhaojing/p/11284659.html

php的闭包函数use的使用相关推荐

  1. JavaScript闭包函数箭头函数调用与执行

    一.标准的闭包函数 //一.标准的闭包函数 function A() {var i=0;++i;console.log('i : ' + i);return function b() {return ...

  2. php的匿名函数和闭包函数

    php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因 ...

  3. php的闭包函数bingto_PHP 闭包那点事儿

    匿名函数 匿名函数,也叫闭包函数,说白了就是"没有名字的函数",和一般函数结构一样,只是少了函数名以及最后需要加上分号;. 注:理论上讲闭包和匿名函数是不同的概念,不过PHP将其视 ...

  4. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  5. swift1.2语言函数和闭包函数介绍

    swift1.2语言函数和闭包函数介绍 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护. swift1.2语言函 ...

  6. 闭包函数python_Python--函数对象闭包函数

    函数对象: 函数是第一类对象 第一类对象: 指可以在执行期创造并作为参数传递给其他函数或存入一个变量的实体 第一类对象所特有的特性为: 可以当容器被存入变量或其他结构 可以被作为参数传递给其他函数 可 ...

  7. 闭包函数 装饰器 迭代器

    闭包函数 一.什么是闭包 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用).闭包指的是:函数内部函数对外部作用域而非全局作用域的引用.简单的说闭包函数就是把 ...

  8. Day04:函数参数、对象、嵌套、闭包函数和装饰器

    上节课复习:     1.什么是函数         函数就是具备某一功能的工具     2.为何用函数         1.程序的组织结构和可读性         2.减少代码冗余         ...

  9. Python基础day4 函数对象、生成器 、装饰器、迭代器、闭包函数

    一.函数对象 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松 ...

  10. 好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器)

    函数进阶 递归函数 回调函数 闭包函数 特点 匿名函数 lambda 表达式 迭代器 iter() next() 迭代器的取值方案 迭代器取值特点,取一个少一个,直到都取完,最后再获取就会报错 检测迭 ...

最新文章

  1. 翟树卿:如何让数据挖掘助力精准化营销
  2. drf中的各种view,viewset
  3. c语言函数库——ispunct函数 判断字符是否为标点符号或特殊字符
  4. java mic波形识别_会议季Mic Drop:您不应该错过的13场Java演讲
  5. envi最大似然分类_闲谈最大后验概率估计(MAP estimate)amp;极大似然估计(MLE)和机器学习中的误差分类...
  6. rhel5 下cacti安装日志
  7. MySQL大表关联如何优化_MySQL 对于大表(千万级),要怎么优化呢?
  8. 搬水果 - 九度教程第31题(哈夫曼树)
  9. 仿微信小程序小空投(头)iApp源码+PHP后端
  10. 删除word中自己插入的单行、双行线
  11. 拼多多砍价群大王:拼多多为什么3年就能上市?
  12. 计算机与home键功能相反的是,home键是什么,虚拟home键如何使用
  13. 跃见非凡!华为Mate40系列国内发布4999元起
  14. Python map() 函数 特殊用法
  15. X上面有一道横线,怎么打出来?
  16. java 每3秒执行一次_@Schedule注释每隔几分钟(或几秒钟)运行一次
  17. java里precision,int precision()
  18. React 系列教程2:编写兰顿蚂蚁演示程序
  19. pythonr语言三种基本结构_如何轻松搞定数据科学面试:Python&R语言篇
  20. QtreeView 操作

热门文章

  1. java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...
  2. 人生的路上,要懂得坚强
  3. 那还剩下多少学习激情?
  4. LeetCode简单题之连续字符
  5. Clang:LLVM 的 C 语言家族前端
  6. MLIR: Infrastructure架构
  7. 机器学习PAI产品架构
  8. BEP 7:CUDA外部内存管理插件(下)
  9. Python:数据提取之JSON与JsonPATH
  10. Ubuntu 系统安装.deb安装包