最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php 函數(shù)中靜態(tài)變量使用的問題實(shí)例分析

 更新時(shí)間:2020年03月05日 08:49:34   作者:懷素真  
這篇文章主要介紹了php 函數(shù)中靜態(tài)變量使用的問題,結(jié)合實(shí)例形式分析了php 函數(shù)中靜態(tài)變量使用過程中遇到的問題,以及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了php 函數(shù)中靜態(tài)變量使用的問題。分享給大家供大家參考,具體如下:

<?php
function msg() {
  static $a = 0;
  echo $a++, '<br />';
}

msg();
msg();
msg();

上述代碼,分別輸出0,1,2 靜態(tài)變量$a在第一次定義并初始化后就會(huì)常駐內(nèi)存,直到腳本執(zhí)行完畢。

當(dāng)?shù)诙握{(diào)用msg()函數(shù)時(shí),這時(shí)的$a值為1,而不會(huì)變成0。

那么問題來了,請(qǐng)看下面的一段代碼:

$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' => '運(yùn)動(dòng)鞋', '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),
);

//生成樹型數(shù)據(jù)
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;
}

//通過給定數(shù)據(jù),返回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>';
//第一次調(diào)用getOpts時(shí),沒有任何問題。
echo getOpts($data);
echo '</select>';

$data2 = genTree($data2);
echo '<select>';
//當(dāng)?shù)诙握{(diào)用時(shí),問題就出現(xiàn)了,還留有上次的數(shù)據(jù)
echo getOpts($data2);
echo '</select>';

上述問題,對(duì)于可能多次調(diào)用的函數(shù),不建議在內(nèi)部使用靜態(tài)變量。

修改getOpts函數(shù)如下,從函數(shù)參數(shù)引入一個(gè)外部變量的引用,來解決此問題。

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>';

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php常用函數(shù)與技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》及《php程序設(shè)計(jì)算法總結(jié)

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • php將金額數(shù)字轉(zhuǎn)化為中文大寫

    php將金額數(shù)字轉(zhuǎn)化為中文大寫

    本文給大家匯總介紹了幾種php將金額數(shù)字轉(zhuǎn)化為中文大寫的實(shí)用函數(shù),各有優(yōu)劣,小伙伴們根據(jù)自己的項(xiàng)目需求自由選擇吧。
    2015-07-07
  • PHP后門隱藏的一些技巧總結(jié)

    PHP后門隱藏的一些技巧總結(jié)

    這篇文章主要介紹了關(guān)于PHP后門隱藏的一些技巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 利用php操作memcache緩存的基礎(chǔ)方法示例

    利用php操作memcache緩存的基礎(chǔ)方法示例

    Memcache函數(shù)庫(kù)是在PECL(PHP Extension Community Library)中,主要作用是搭建大容量的內(nèi)存數(shù)據(jù)的臨時(shí)存放區(qū)域,在分布式的時(shí)候作用體現(xiàn)的非常明顯,否則不建議使用。本文將給大家介紹了關(guān)于利用php操作memcache緩存的基礎(chǔ)方法,需要的朋友可以參考下。
    2017-08-08
  • PHP代碼網(wǎng)站如何防范SQL注入漏洞攻擊建議分享

    PHP代碼網(wǎng)站如何防范SQL注入漏洞攻擊建議分享

    所有的網(wǎng)站管理員都會(huì)關(guān)心網(wǎng)站的安全問題。說到安全就不得不說到SQL注入攻擊(SQL Injection)
    2012-03-03
  • PHP一致性hash分布式算法封裝類定義與用法示例

    PHP一致性hash分布式算法封裝類定義與用法示例

    這篇文章主要介紹了PHP一致性hash分布式算法封裝類定義與用法,結(jié)合完整實(shí)例形式分析了一致性hash分布式算法的原理、實(shí)現(xiàn)及使用方法,需要的朋友可以參考下
    2018-08-08
  • 淺析php插件 Simple HTML DOM 用DOM方式處理HTML

    淺析php插件 Simple HTML DOM 用DOM方式處理HTML

    本篇文章是對(duì)php插件Simple HTML DOM 用DOM方式處理HTML進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • php獲取當(dāng)前頁(yè)面完整URL地址

    php獲取當(dāng)前頁(yè)面完整URL地址

    這篇文章主要介紹了php獲取當(dāng)前頁(yè)面完整URL地址的函數(shù),感興趣的小伙伴們可以參考一下
    2015-12-12
  • PHP開發(fā)的一些注意點(diǎn)總結(jié)

    PHP開發(fā)的一些注意點(diǎn)總結(jié)

    技術(shù)平臺(tái)的不同,導(dǎo)致了實(shí)現(xiàn)方式的不同,同樣是PHP,小公司往往選擇的是WIN平臺(tái)而大公司選擇的是類unix平臺(tái)(Linux,FreeBSD and Other) ,現(xiàn)在就最近這段時(shí)間的學(xué)習(xí),這好乘國(guó)慶長(zhǎng)假這段時(shí)間好好的總結(jié)下的了.
    2010-10-10
  • 關(guān)于svn沖突的解決方法

    關(guān)于svn沖突的解決方法

    本篇文章是對(duì)關(guān)于svn沖突的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 使用迭代器 遍歷文件信息的詳解

    使用迭代器 遍歷文件信息的詳解

    本篇文章是對(duì)使用迭代器 遍歷文件的信息進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06

最新評(píng)論

南靖县| 长顺县| 台北市| 富蕴县| 普兰县| 广饶县| 景谷| 剑阁县| 增城市| 五原县| 金沙县| 凌海市| 绥宁县| 房山区| 安阳市| 赤水市| 奉化市| 株洲县| 亚东县| 河北省| 集贤县| 卫辉市| 兰考县| 日土县| 璧山县| 新和县| 体育| 肃宁县| 平陆县| 静海县| 勐海县| 甘德县| 通海县| 射阳县| 三门峡市| 淳化县| 辉南县| 建宁县| 界首市| 九龙城区| 左云县|