php函数自身调用中的谜团
在php中,当编写一个函数并调用自身时,可能会遇到一个令人困惑的问题。考虑下面的代码:
function sd($a = 3, $b = 2) { $c = $a + $b; if ($c < 6) { sd($a, $c); } echo $c; } sd();
登录后复制
您可能会认为此代码会打印 8,因为 c 被初始化为 5,并且不再满足 if 语句。但是,奇怪的是,输出却是 85。
解释这个奇怪行为的关键在于理解 php 函数调用中的值传递行为。当函数调用自身时,它会创建新的变量作用域,并且向新作用域传递变量的值(而不是引用)。
在这个示例中,第一次调用 sd(3, 2) 会创建一个新作用域,其中有自己的 $a 和 $b 变量。当 if 语句执行时,c 被更新为 5,并且 since(3, 5) 被调用。
立即学习“PHP免费学习笔记(深入)”;
在第二个作用域中,因为 c 比 6 小,所以 recursive 调用继续执行。然而,请注意,新作用域中有自己的 $c 变量,并且不会被原始值覆盖。因此,它被更新为 8,并且控制流返回到原始调用。
因此,最终打印的是 8 和 5,而不是 85。执行顺序如下:
- sd(3, 2) 调用
- c = 5
- since(3, 5) 调用
- c = 8
- 返回根
- 打印 c = 8
- 打印 c = 5
以上就是PHP函数递归调用中,为何输出结果并非预期值?的详细内容,更多请关注抖狐科技其它相关文章!
-
宝可梦大集结顽皮雷弹排球怎么玩 顽皮雷弹排球玩法攻略
在宝可梦大集结的趣味玩法中,"顽皮雷弹排球"因其独特规则而吸引了玩家的目光。php小编草莓特别为大家带来宝可梦大集结顽皮雷弹排球的详细玩法攻略,帮助大家轻松掌握这个欢乐模式。本文将从获胜条件、操作技巧...
-
金铲铲之战狂暴战士韦鲁斯阵容搭配推荐
问题:狂暴战士体系在排位赛中强势崛起,韦鲁斯获得全面加强,如何驾驭这股风潮?简单说明:韦鲁斯在金铲铲之战版本更新后得到强化,且狂暴战士体系表现强劲,在排位赛中屡获佳绩。引导阅读:php小编苹果将详细解...
-
作业帮怎么查作业答案
在作业帮查作业答案的方法:打开作业帮网站或应用程序。登录或注册。点击“提问”拍照或上传作业题,并输入信息。点击“立即提问”。查看老师或用户提供的答案和讲解。在作业帮上查作业答案的方法 步骤 1:打开作...
-
迈普交换机如何配置命令
迈普交换机配置指南分六步完成:连接交换机并进入特权模式配置接口(ip地址、vlan、速率/双工)配置路由(默认网关、静态/动态路由)配置安全功能(密码、acl、snmp)配置其他选项(vlan、qos...
-
骁龙8gen4芯片手机上市时间
骁龙 8 gen 4 芯片将于 2023 年第 2 季度上市,搭载该芯片的旗舰手机预计将于 4 月至 6 月期间发布。骁龙 8 Gen 4 芯片手机上市时间 预计上市时间:2023 年第 2 季度 详...