热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php函数内的静态变量,php函数中静态变量使用的问题实例分析

当前位置:首页网络编程PHP编程详细页面php函数中静态变量使用的问题实例分析时间:2020-03-05来源:电脑系统城作者

当前位置:首页 > 网络编程 > PHP编程 > 详细页面

php 函数中静态变量使用的问题实例分析

时间:2020-03-05来源:电脑系统城作者:电脑系统城

本文实例讲述了php 函数中静态变量使用的问题。分享给大家供大家参考,具体如下:

function msg() {

static $a = 0;

echo $a++, '
';

}

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 .= '' . str_repeat(' ', $level * 3) . $v['title'] . '';

if (!empty($v[$son])) {

getOpts($v[$son], $idArr, $level + 1, $son);

}

}

}

return $opt;

}

$data = genTree($data);

echo '';

//第一次调用getOpts时,没有任何问题。

echo getOpts($data);

echo '';

$data2 = genTree($data2);

echo '';

//当第二次调用时,问题就出现了,还留有上次的数据

echo getOpts($data2);

echo '';

上述问题,对于可能多次调用的函数,不建议在内部使用静态变量。

修改getOpts函数如下,从函数参数引入一个外部变量的引用,来解决此问题。

function getOpts($data, $idArr = array(), &$opt = '', $level = 0, $son = 'child') {

if (!empty($data)) {

foreach ($data as $k => $v) {

$opt .= '' . str_repeat(' ', $level * 3) . $v['title'] . '';

if (!empty($v[$son])) {

getOpts($v[$son], $idArr, $opt, $level + 1, $son);

}

}

}

}

$data = genTree($data);

getOpts($data, array(), $opt);

echo '';

echo $opt;

echo '';

$data2 = genTree($data2);

getOpts($data2, array(), $opt2);

echo '';

echo $opt2;

echo '';

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》及《php程序设计算法总结》

希望本文所述对大家PHP程序设计有所帮助。

分享到:

相关信息

7bf270d16f0e4c6235383e3c32ac73bb.png

Laravel框架自定义分页样式操作示例

这篇文章主要介绍了Laravel框架自定义分页样式操作,结合实例形式详细分析了laravel框架自定义分页样式的具体操作步骤、实现方法及相关注意事项,需要的朋友可以参考下...

2020-02-03

4c9118ae79829ab455c383fb745742e7.png

php封装的page分页类完整实例代码

这篇文章主要介绍了php封装的page分页类完整实例代码,需要的朋友可以参考下...

2020-02-03



推荐阅读
author-avatar
坏坏不贱_233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有