<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    silvermyth

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      1 隨筆 :: 12 文章 :: 1 評論 :: 0 Trackbacks
         近日在項目開發過程中,遇到了在php中使用閉包和回調函數的情況,先看代碼:

        function filterAlarmNodes()
        {
            $category = $this->params["url"]['category'];
            $nodesInfo = $this->_getHostsInfo();
            $clusterName = $this->Cluster->getClusterName();
            $clusterView = $this->health->clusterView($nodesInfo$clusterName);
            $all_hosts = $this->machines->getAllDisplayNames();
            //var_dump($clusterView);
            $data = array();
            foreach ($clusterView as $key => $entry) {
                if (!preg_match('/[0-9\.]/', $key))
                    continue;
                $_this = $this;
                $callback = function ($category$key$entryuse($_this){
                    return call_user_func(array($_this, '_filterNodes'), $category$key$entry);
                };
                if (($desc = $callback($category$key$entry)) != false) {
                    $data[] = array(
                        'nodename' => $all_hosts[$this->machines->getHostByIP($key)]['dispname'],
                        'ip' => $key,
                        'desc' => $desc
                    );
                }
            }
            $info = array('code' => 'success', 'data' => $data);
            return $this->_jsonView($info);
    }
        該方法主要用來篩選集群中警告狀態的節點,根據傳入的參數category,返回不同的結果集,例如CPU溫度過高的,CPU利用率過高的等等;由于每個category采用的篩選算法不同,因此定義了一個callback方法,該方法調用$this的_filterNodes方法根據category繼續進行方法分派。定義callback屏蔽了不同篩選方法的差異,外部調用接口始終一致。

        function _filterNodes($category$key$entry)
        {
            switch ($category){
                case "cpu_temp_alarm":
                    return $this->_filterNodesForCpuTemp($key$entry);
                case "cpu_usage_alarm":
                    return $this->_filterNodesForCpuUsage($key$entry);
                default:
                    break;
            }
        }
        _filterNodesForCpuTemp方法很簡單,根據當前節點采集的各個meter的值(包含在$entry中),返回該節點是否需要包含在篩選結果集中(false為不包含)。在閉包和callback使用中,有兩個地方需要注意:
    •     _filterNodes不能定義為private,否則回報錯。
    •     $this不能直接先use($this),然后在回調中使用(php會報錯);需要先把$this賦值給一個變量(本例中是$_this),然后再use($_this),然后在回調方法中使用
    posted on 2017-04-13 18:01 Gavin Li 閱讀(252) 評論(0)  編輯  收藏 所屬分類: Php

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 伊人久久免费视频| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲人成小说网站色| 91香蕉成人免费网站| 亚洲国产日韩在线| 国产大片线上免费观看| 亚洲av无码不卡久久| 成年轻人网站色免费看| 亚洲AV永久无码精品网站在线观看| 成人性生交视频免费观看| 国产成人人综合亚洲欧美丁香花 | 亚洲国产日韩在线观频| 久青草国产免费观看| 亚洲最大av无码网址| 国产免费一区二区视频| 亚洲高清美女一区二区三区| 曰批视频免费40分钟试看天天| 亚洲免费黄色网址| 国产网站免费观看| 中文精品人人永久免费| 亚洲自偷精品视频自拍| 成人免费视频88| 免费人成大片在线观看播放电影| 亚洲综合伊人久久大杳蕉| 131美女爱做免费毛片| 亚洲色成人四虎在线观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲最新黄色网址| 男女啪啪永久免费观看网站| 九九全国免费视频| 亚洲国语精品自产拍在线观看| 在线观看成人免费视频不卡| 处破女第一次亚洲18分钟| 国产AV无码专区亚洲精品| 中文字幕无码不卡免费视频 | 成人久久免费网站| 久久亚洲国产成人影院| 亚洲中文字幕在线观看| 在线v片免费观看视频| 久久久久女教师免费一区|