在PHP函数中静态变量怎样使用,要注意什么?
导读:这篇文章主要给大家分享的是PHP函数中静态变量的使用,及使用过程需要注意的问题,下文示例代码具有一定的借鉴价值,感兴趣的朋友可以参考,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧。 <?php function msg(...
这篇文章主要给大家分享的是PHP函数中静态变量的使用,及使用过程需要注意的问题,下文示例代码具有一定的借鉴价值,感兴趣的朋友可以参考,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧。
?php
function msg() {
static $a = 0;
echo $a++, 'br />
';
}
msg();
msg();
msg();
上述代码,分别输出0,1,2 静态变量$a在第一次定义并初始化后就会常驻内存,直到脚本执行完毕。
当第二次调用msg()函数时,这时的$a值为1,而不会变成0。
那么问题来了,请看下面的一段代码:
$data = array(
array('id' =>
1, 'title' =>
'衣服', 'parent' =>
0),
array('id' =>
2, 'title' =>
'鞋子', 'parent' =>
0),
array('id' =>
3, 'title' =>
'衬衫', 'parent' =>
1),
array('id' =>
4, 'title' =>
'T恤', 'parent' =>
1),
array('id' =>
5, 'title' =>
'运动鞋', 'parent' =>
2),
array('id' =>
6, 'title' =>
'休闲鞋', 'parent' =>
2),
);
$data2 = array(
array('id' =>
1, 'title' =>
'食物', 'parent' =>
0),
array('id' =>
2, 'title' =>
'肉食', 'parent' =>
1),
array('id' =>
3, 'title' =>
'素食', 'parent' =>
1),
array('id' =>
4, 'title' =>
'牛肉', 'parent' =>
2),
array('id' =>
5, 'title' =>
'面条', 'parent' =>
3),
array('id' =>
6, 'title' =>
'馒头', 'parent' =>
3),
);
//生成树型数据
function genTree($items, $id = 'id', $pid = 'parent', $son = 'child') {
$tree = array();
$tmpMap = array();
foreach ($items as $item) {
$tmpMap[$item[$id]] = $item;
}
foreach ($items as $item) {
if (isset($tmpMap[$item[$pid]])) {
$tmpMap[$item[$pid]][$son][] = &
$tmpMap[$item[$id]];
}
else {
$tree[] = &
$tmpMap[$item[$id]];
}
}
unset($tmpMap);
return $tree;
}
//通过给定数据,返回option的字符串,用于select下拉框
function getOpts($data, $idArr = array(), $level = 0, $son = 'child') {
static $opt = '';
if (!empty($data)) {
foreach ($data as $k =>
$v) {
$opt .= 'option value=' . $v['id'] . (in_array($v['id'], $idArr) ? ' selected="true"' : '') . '>
' . str_repeat(' ', $level * 3) . $v['title'] . '/option>
';
if (!empty($v[$son])) {
getOpts($v[$son], $idArr, $level + 1, $son);
}
}
}
return $opt;
}
$data = genTree($data);
echo 'select>
';
//第一次调用getOpts时,没有任何问题。
echo getOpts($data);
echo '/select>
';
$data2 = genTree($data2);
echo 'select>
';
//当第二次调用时,问题就出现了,还留有上次的数据
echo getOpts($data2);
echo '/select>
';
上述问题,对于可能多次调用的函数,不建议在内部使用静态变量。
修改getOpts函数如下,从函数参数引入一个外部变量的引用,来解决此问题。
function getOpts($data, $idArr = array(), &
$opt = '', $level = 0, $son = 'child') {
if (!empty($data)) {
foreach ($data as $k =>
$v) {
$opt .= 'option value=' . $v['id'] . (in_array($v['id'], $idArr) ? ' selected="true"' : '') . '>
' . str_repeat(' ', $level * 3) . $v['title'] . '/option>
';
if (!empty($v[$son])) {
getOpts($v[$son], $idArr, $opt, $level + 1, $son);
}
}
}
}
$data = genTree($data);
getOpts($data, array(), $opt);
echo 'select>
';
echo $opt;
echo '/select>
';
$data2 = genTree($data2);
getOpts($data2, array(), $opt2);
echo 'select>
';
echo $opt2;
echo '/select>
';
关于PHP函数中静态变量的使用就介绍到这,上述示例具有一定的参考,对大家学习PHP函数中静态变量会有一定的帮助。最后,想要了解更多PHP函数的静态变量的内容,大家可以继续关注其它的相关文章。
文本转载自脚本之家
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 在PHP函数中静态变量怎样使用,要注意什么?
本文地址: https://pptw.com/jishu/653147.html
