首页 > 编程语言 >PHP闭包之变量作用域

PHP闭包之变量作用域

时间:2022-11-25 12:07:47浏览次数:42  
标签:闭包 function java 作用域 go func test PHP hello


在项目中,难免会遇到闭包的形式,那么在闭包中,变量的作用域到底是怎么样的呢。下面有几个简单的例子。

function test_1()
{
$a = 'php';
$func = function ($b) use ($a)
{
// $a = 'java';
echo $b.'_'.$a;
};
return $func;
}
$test = test_1();
$test('hello');

以上结果会输出 hello_php 那么可以看到 $a 被作为了变量 通过use传递给了 匿名函数 func 作为参数使用;如果去掉$a = 'java'的注释,那么以上结果会输出 hello_java

e2:将上面的函数改写为

function test_2()

{
$a = 'php';
$func = function ($b) use ($a)
{
// $a = 'go';
echo $b.'_'.$a;
};
$a = 'java';
return $func;
}
$test = test_2();
$test('hello');

以上结果会输出 hello_php 说明在test_2中第二次为$a赋值的时候,并没有传递的到 func函数里面去。

同样的如果去掉 $a = 'go';那么以上结果会输出 hello_go

e3:现在为$a 加上引用

function test_3()

{
$a = 'php';
$func = function ($b) use (&$a)
{
//$a = 'go';
echo $b.'_'.$a;
};
$a = 'java';
return $func;
}
$test = test_3();
$test('hello');

以上结果会输出 hello_java 说明在地址引用的时候 变量 a 的值会传递到 函数func里面去。

同样的如果去掉 $a = 'go';

那么以上结果会输出 hello_go;

以上三个简单的测试,很明白的说明的闭包里面参数的作用域。

在没有使用地址引用的时候 匿名函数的变量值,不会随着外部变量的改变而改变。(闭包的意义)

在使用了地址引用之后,参数值会被外部函数的参数值所改变。

标签:闭包,function,java,作用域,go,func,test,PHP,hello
From: https://blog.51cto.com/u_13940603/5886191

相关文章

  • php运用无限级分类实现评论及回复功能
    经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以......
  • PHP+Redis实现分页
    废话少说,上代码吧<?phpclassRedisPage{protected$_redis;protected$_redis_ip;protected$_redis_port;protected$_redis_db;protected$_has......
  • PHP文件日志记录
    <?php/***@notes:Logging*@auther:BinShi*@dateTime:2020/05/1317:44*/classLogging{/***进程唯一ID**@varstring*/priva......
  • 浅谈:Java Web中requset,session,application 的作用域及区别
    浅谈:JavaWeb中requset,session,application的作用域及区别三者概述requset概述:request是表示一个请求,只要发出一个请求就会创建一个request用处:常用于服务器间同一请求......
  • 安装php环境
    环境:192.168.11.20PHP(主机名)PHP节点关闭防火墙配置好yum源用centos7.5-1804(1)安装配置基础服务[[email protected]]#yuminstall-ygccgcc-c++libxml2-......
  • 安装php7.2
    #方法一:rpm-Uvhhttps://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmrpm-Uvhhttps://mirror.webtatic.com/yum/el7/webtatic-release.rpm#......
  • php危险函数
    php危险函数可以执行linux系统命令,如果没有禁用相关函数,也没有对函数使用的参数进行严格有效的过滤,可能产生命令执行漏洞。1.eval()函数eval()函数把字符串按照PHP代......
  • PHP基础学习
    PHP基础学习在php中,.表示字符串连接符echo"1111111111"."2222222222"."333333333<br/>";print"1111111111"."2222222222"."333333333<br/>";......
  • 变量 常量 作用域
    变量分为局部变量,类变量,实例变量局部变量定义在方法中,必须声明和初始化,类变量:static定义以后在方法中即可使用实例变量:从属于对象,如果不初始化默认为00.0falsenull......
  • PHP 如何使用 Elasticsearch API接口
    一、实战场景如何在 PHP 中使用 ElasticsearchAPI 接口二、知识点PHPElasticsearchRestful 接口三、菜鸟实战1、安装 Elasticsearch 官方 PHPSDK​​https://gith......