
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 = 5since(3, 5) 调用c = 8返回根打印 c = 8打印 c = 5
以上就是PHP函数递归调用中,为何输出结果并非预期值?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1250885.html
微信扫一扫
支付宝扫一扫