php递归数值类型问题,求高手解答

方法中$aFileArr这个变量如果设置为static类型,浏览器就会卡死,陷入死循环,求解答数值类型之间的区别... 方法中$aFileArr这个变量如果设置为static类型,浏览器就会卡死,陷入死循环,求解答数值类型之间的区别 展开
 我来答
百度网友8b5ddc6
推荐于2016-11-24 · TA获得超过683个赞
知道小有建树答主
回答量:606
采纳率:0%
帮助的人:484万
展开全部
哈哈,这个问题让我来给你解答吧。
1:变量$aFileArr不设置成static类型时,他只是函数中的一个局部变量,当函数递归发生时,函数每一次执行都会产生一个名字为$aFileArr的变量,但是他们在内存栈区存在的形式为不同的个体,最终由return返回出去,被上一级的$aFileArr给push。所以不会变为死循环。

2:变量$aFileArr设置成static类型时,变量$aFileArr不在内存栈区存放,而是在静态数据区存放,不管该函数递归多少次,变量都只有一个。当函数执行完成返回该静态变量后,上一级的静态变量将这个静态变量push。而这两个静态变量是同一个变量,当上一级静态变量内容发生变化,他push掉的自己也发生变化,他push掉自己发生变化,那上一级的静态变量又发生变化。就这样进入了死循环。

不知道你看懂了没?

总结:一般变量,函数每次执行都会产生名字相同,但个体各自存在。就如同大袋子装小袋子,虽然都叫做袋子,但是都是独立的个体。

静态变量,函数第一次执行才会产生,以后每次产生都是使用第一次产生的静态变量,不管函数运行多少次,操作的都只有一个静态变量。就如同自己家有一个袋子,每次使用后把这个袋子在放入到这个袋子里面,怎么能放得进去呢?

OK!~~
莘赡05V
2014-11-14 · 知道合伙人软件行家
莘赡05V
知道合伙人软件行家
采纳数:1397 获赞数:3710
毕业安徽理工大学

向TA提问 私信TA
展开全部
你最后一个递归调用那个,不需要返回值,直接调用
aGetAllFile($folder.'/'.$file);
追问
其实我的截图是可以运行的,不会卡死,但是只要把那个变量类型改成static他就卡死了,我就是想知道为什么
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者BbPV9CfuDM
2014-11-14 · TA获得超过1445个赞
知道小有建树答主
回答量:977
采纳率:85%
帮助的人:184万
展开全部
静态变量:当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果;
如果$aFileArr设置为静态变量,每次递归$aFileArr都是前一次执行的结果加上自己的结果在传给下一次递归,在把结果返回,肯定就卡死了。
追问
那更改静态变量,递归返回只是更改值啊,为什么会卡死,麻烦说的详细点,谢谢!我提升悬赏
追答
$aFileArr 设置为静态变量,$aFileArr = array(); 也就没用了,他是前一次执行递归的结果,不会被重新初始化,还要用这个变量返回结果,计算机就彻底凌乱了,他会成几何倍数增长。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式