介绍
今天就跟大家聊聊有关怎么在php函数中使用静态变量,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
具体如下:
& lt; php ? function 味精(),{ static 才能;a 美元;=,0; echo 才能;$ + +,& # 39;& lt; br /祝辞;& # 39;; } 味精(); 味精(); 味精();
上述代码,分别输出0,1,2静态变量一美元在第一次定义并初始化后就会常驻内存,直到脚本执行完毕。
当第二次调用味精()函数时,这时的一个美元值为1,而不会变成0。
那么问题来了,请看下面的一段代码:
data 美元;=,阵列( 数组才能(& # 39;id # 39;,=祝辞,1,& # 39;标题# 39;,=祝辞,& # 39;衣服& # 39;,,& # 39;父母# 39;,=祝辞,0), 数组才能(& # 39;id # 39;,=祝辞,2,& # 39;标题# 39;,=祝辞,& # 39;鞋子& # 39;,,& # 39;父母# 39;,=祝辞,0), 数组才能(& # 39;id # 39;,=祝辞,3,& # 39;标题# 39;,=祝辞,& # 39;衬衫& # 39;,,& # 39;父母# 39;,=祝辞,1), 数组才能(& # 39;id # 39;,=祝辞,4,& # 39;标题# 39;,=祝辞,& # 39;T恤& # 39;,,& # 39;父母# 39;,=祝辞,1), 数组才能(& # 39;id # 39;,=祝辞,5日,& # 39;标题# 39;,=祝辞,& # 39;运动鞋& # 39;,,& # 39;父母# 39;,=祝辞,2), 数组才能(& # 39;id # 39;,=祝辞,6日,& # 39;标题# 39;,=祝辞,& # 39;休闲鞋& # 39;,,& # 39;父母# 39;,=祝辞,2), ); $ data2 =,阵列( 数组才能(& # 39;id # 39;,=祝辞,1,& # 39;标题# 39;,=祝辞,& # 39;食物& # 39;,,& # 39;父母# 39;,=祝辞,0), 数组才能(& # 39;id # 39;,=祝辞,2,& # 39;标题# 39;,=祝辞,& # 39;肉食& # 39;,,& # 39;父母# 39;,=祝辞,1), 数组才能(& # 39;id # 39;,=祝辞,3,& # 39;标题# 39;,=祝辞,& # 39;素食& # 39;,,& # 39;父母# 39;,=祝辞,1), 数组才能(& # 39;id # 39;,=祝辞,4,& # 39;标题# 39;,=祝辞,& # 39;牛肉& # 39;,,& # 39;父母# 39;,=祝辞,2), 数组才能(& # 39;id # 39;,=祝辞,5日,& # 39;标题# 39;,=祝辞,& # 39;面条& # 39;,,& # 39;父母# 39;,=祝辞,3), 数组才能(& # 39;id # 39;,=祝辞,6日,& # 39;标题# 39;,=祝辞,& # 39;馒头& # 39;,,& # 39;父母# 39;,=祝辞,3), );//生成树型数据 function genTree(项目,美元,美元id =, & # 39; id # 39;,, pid 美元;=,& # 39;父母# 39;,,son 美元;=,& # 39;孩子# 39;),{ 时间=美元才能tree 数组(); 时间=美元才能tmpMap 数组(); foreach 才能;(items 美元;as 项目美元),{ ,,,tmpMap美元($ item [$ id]],=,美元项目; ,,} foreach 才能;(items 美元;as 项目美元),{ ,,,if (收取($ tmpMap [$ item [$ pid]])), { ,,,,,tmpMap美元($ item [$ pid]][$儿子][],=,,tmpMap美元($ item [$ id]]; ,,,},{else ,,,,,美元树[],=,,tmpMap美元($ item [$ id]]; ,,,} ,,} 设置才能($ tmpMap); return 才能;美元树; }//通过给定数据,返回选择的字符串,用于选择下拉框 function getopt(数据,美元,美元idArr =,数组(),,level 美元;=,0,,son 美元;=,& # 39;孩子# 39;),{ static 才能;opt 美元;=,& # 39;& # 39;; if 才能;(!空(元数据)),{ ,,,foreach (data 美元;as k 美元;=祝辞,美元v), { ,,,,,opt 美元。=,& # 39;& lt; option 价值=https://www.yisu.com/zixun/C涝獀 (“id”)。(in_array (v (“id”), idArr美元)?选择=" true ":”)。“>”。函数(“$ * 3)。美元v(“标题”)。“> 选项”; 如果(!空(v $(美元的儿子))){ getopt (v(儿子)美元,美元idArr,等级+ 1美元,美元的儿子); } } } 返回选择美元; } (data=genTree美元数据); 回声的<选择>;//第一次调用getopt时,没有任何问题。 回声getopt(元数据); 回声的选择>; (data2=genTree美元data2); 回声的<选择>;//当第二次调用时,问题就出现了,还留有上次的数据 回声getopt ($ data2); 回声选择>,
上述问题,对于可能多次调用的函数,不建议在内部使用静态变量。
修改getopt函数如下,从函数参数引入一个外部变量的引用,来解决此问题。
function getopt(数据,美元,美元idArr =,数组(),,,opt 美元;=,& # 39;& # 39;,,level 美元;=,0,,son 美元;=,& # 39;孩子# 39;),{ if 才能;(!空(元数据)),{ ,,,foreach (data 美元;as k 美元;=祝辞,美元v), { ,,,,,opt 美元。=,& # 39;& lt; option 价值=https://www.yisu.com/zixun/C涝獀 (“id”)。(in_array (v (“id”), idArr美元)?选择=" true ":”)。“>”。函数(“$ * 3)。美元v(“标题”)。“>怎么在php函数中使用静态变量