PHP闭包获取外部变量和global关键字声明变量的区别
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要讲解了"PHP闭包获取外部变量和global关键字声明变量的区别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PHP闭包获取外部变量和gl
千家信息网最后更新 2025年01月16日PHP闭包获取外部变量和global关键字声明变量的区别
这篇文章主要讲解了"PHP闭包获取外部变量和global关键字声明变量的区别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PHP闭包获取外部变量和global关键字声明变量的区别"吧!
闭包
闭包是一个常见的概念,我们通常可以将其与回调函数配合使用,可以使代码更加简洁易读。
闭包可以 通过拷贝的方式 让函数使用父作用域中的变量。如:
$global = 'hello';$bbb = function()use($global){ echo $global."\n";};$bbb();//输出 'hello'
global关键字声明变量
通过global声明变量同样可以使函数体调用到函数外部的变量,不过global与use不同,globle关键字会使创建 一个与外部变量同名的引用 ,并且在函数内对变量作出修改同样会作用域外部变量。
$global = 'hello';$fun = function(){ global $global; $global =' world'; echo $global."\n";};$fun();// 输出 'world'
这里只是创建一个同名引用而已,并不会改变原本外部变量$global的作用域,也就是说在另外一个函数中调用该依旧需要声明或者使用闭包
$global = 'hello';$fun = function(){ global $global; $global =' world'; echo 'a:'.$global."\n";};$ccc = function(){ echo 'b:'.$global;};$fun()$ccc()/*
输出
a: worldNotice: Undefined variable: global in xxxxxxx on line xx*/
再稍微改一下代码,这样更容易对比闭包和global关键字声明变量这两种访问外部变量方式的区别。
这里b和d两个输出可以看出来,global改变了外部变量的值,而闭包方式并没有。
输出:
a: worldb: worldc:chinad: world最后再贴一个官方文档中比较经典的使用匿名函数,闭包与回调函数配合的例子:
class Cart{ const PRICE_BUTTER = 1.00; const PRICE_MILK = 3.00; const PRICE_EGGS = 6.95; protected $products = array(); public function add($product, $quantity) { $this->products[$product] = $quantity; } public function getQuantity($product) { return isset($this->products[$product]) ? $this->products[$product] : FALSE; } public function getTotal($tax) { $total = 0.00; $callback = function ($quantity, $product) use ($tax, &$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePerItem * $quantity) * ($tax + 1.0); }; array_walk($this->products, $callback); return round($total, 2); }}$my_cart = new Cart;$my_cart->add('butter', 1);$my_cart->add('milk', 3);$my_cart->add('eggs', 6);print $my_cart->getTotal(0.05) . "\n";感谢各位的阅读,以上就是"PHP闭包获取外部变量和global关键字声明变量的区别"的内容了,经过本文的学习后,相信大家对PHP闭包获取外部变量和global关键字声明变量的区别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
变量
闭包
函数
关键
关键字
输出
作用
方式
学习
代码
内容
可以使
不同
简洁
两个
也就是
也就是说
例子
原本
只是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发动画作品
天津通讯软件开发厂家现货
计算机网络技术毕业就业
清远服务器机箱加工
五大数据库wiley
宽带突然上不了网服务器无响应
江苏惠普服务器维修维保费用
以色列顶尖网络安全公司
数据库表 使用中
郑州中航软件开发6
软件开发流程图设计素描
我是网络安全挑战赛
四月游网络技术有限公司
工业控制网络技术要求
数据库连接池偶尔无连接
家庭网络安全的设计方法
对云计算和网络安全的理解
服务器如何登录不了
魔兽世界如何使用数据库
mac 服务器域名
河南复创网络技术有限公司
青岛北京易诚互动网络技术
提升网络安全性的制度
kali文件下载服务器
网络安全管理体系时首先应该
中国专利信息中心大数据库
计算机应用技术包含网络技术吗
温州计算机网络技术排名
家庭网络安全的设计方法
服务器里有多少钻石