php 使用use 和直接传参的区别

查看:104
本文介绍了php 使用use 和直接传参的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

php 使用 闭包时使用 use 和普通传参的区别有哪些??

$a = 100;

$b = function ($c) use ($a) {
    $a += 13;
    return $a * $c;
};

echo $b(432);

通过这种用法, 我只知道闭包及用法有如下:

  1. 可以在下文中的任何一个地方使用闭包函数$b()对传入的值进行处理, 并且在处理的过程中默认使用预先定义好的变量$a参与处理.

然而, 仅此一点作用么??

解决方案

实际应用 1 : 在创建闭包时, 生成所use变量的快照, 下文再次调用闭包函数时, 快照变量不改变

    $a = 5;
    
    $b = function ($x) use ($a) {
        $a += $x;
        echo $a;
    };
    
    $a = 10; // 这个变量被再次赋值, 但是在use语句中的'快照'是不会改变的
    
    $b(100); // 输出 : 105

实际应用 2 : 使用引用传值, 生成所use变量的指针, 下文再次调用闭包函数时, 快照变量会改变(其实这样做与直接传参已经没有区别, 所以这么做意义不大, 而且代码可读性降低)

    $a = 5;
    
    $b = function ($x) use (&$a) {
        $a += $x;
        echo $a;
    };
    
    $a = 10; // 变量重新赋值, 上文中闭包所引用的变量值也被改变
    
    $b(100); // 输出 : 110

这篇关于php 使用use 和直接传参的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆