zoukankan      html  css  js  c++  java
  • php中匿名(闭包)函数以及function use的用法

    匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

    匿名函数目前是通过 Closure 类来实现的。(摘自官方文档

    1、简单示例

    定义一个函数,并没有指定名称,再指定一个参数

    1 $fun = function ($variable) {
    2   echo $variable . '---';
    3 };
    4 $a = '123'; //变量$a定义在匿名函数定义前,还是后,结果是一样的
    5 $fun($a);
    6 // 运行结果为: 123---

    2、未使用 use

    如果不使用use ,则不能在匿名函数中调用变量$b。

    1 $b = '456';
    2 $fun = function ($variable) {
    3     echo $variable .'---'. $b;
    4 };
    5 $a = '123';
    6 $fun($a);
    7 // 输出结果为 ErrorException 未定义变量 b

    3、使用use

    借助关键字use之后,就可以调用变量$b了

    1 $a = '123';
    2 $b = '456';// 此时,变量$b必须定义在匿名函数定义前
    3 $fun = function ($variable) use($b) {
    4     echo $variable .'---'. $b;
    5 };
    6 $fun($a);
    7 // 输出结果是 123---456

    前提是变量$b必须在匿名函数定义之前,否则依然会提示未定义变量 b

    4、不使用&

     1 $a = '123';
     2 $b = '456';// 此时,变量$b必须定义在匿名函数定义前
     3 $fun = function ($variable) use($b) {
     4     echo $variable .'---'. $b;
     5 };
     6 $fun($a);
     7 // 输出结果是 123---456
     8 $b = 5678;
     9 $fun($a);
    10 // 输出结果依然是 123---456

    示例4中,虽然修改了变量b的值,但是结果依然是123—456,因为匿名函数在定义时已经保存了变量b的值,这也是证明了为何$b必须定义在匿名函数定义之前的原因了,因为在定义时,会保存这个值,如果要想随着外界修改而自动更新,则就使用引用传递了,即&

    5、使用&

     1 $a = '123';
     2 $b = '456';
     3 $fun = function ($variable) use(&$b) {
     4     echo $variable .'---'. $b;
     5 };
     6 $fun($a);
     7 // 输出结果是 123---456
     8 $b = 5678;
     9 $fun($a);
    10 // 输出结果变为 123---5678

    备注:以上调试php版本是7.3.4

  • 相关阅读:
    如何解除任务管理器被禁用
    一、JavaScript概述
    001_html基本结构
    postman常见问题记录
    fidder工具使用
    SonarQube工具使用问题汇总
    业余书籍读后感
    jmater常见问题处理
    测试知识记录(更新中)
    HTTP协议
  • 原文地址:https://www.cnblogs.com/cyfblogs/p/13787208.html
Copyright © 2011-2022 走看看