首页后端开发PHP在PHP函数中静态变量怎样使用,要注意什么?

在PHP函数中静态变量怎样使用,要注意什么?

时间2024-03-26 00:44:03发布访客分类PHP浏览1052
导读:这篇文章主要给大家分享的是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
用PHP怎样做上传文件的功能,方法是什么? C语言实现希尔排序与直接插入排序的性能对比怎样

游客 回复需填写必要信息