<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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品无码国产片| 亚洲国产AV无码专区亚洲AV| 亚洲日日做天天做日日谢| **一级毛片免费完整视| 亚洲人成在线播放网站岛国| 57pao国产成永久免费视频| 亚洲精品高清国产麻豆专区| 综合在线免费视频| 亚洲午夜福利在线视频| 性做久久久久免费观看| 人妻仑刮八A级毛片免费看| 不卡精品国产_亚洲人成在线| 久99久无码精品视频免费播放| 久久亚洲成a人片| 亚洲第一网站免费视频| 亚洲成A人片在线播放器| 日韩中文字幕免费| 国产激情久久久久影院老熟女免费 | 国产99精品一区二区三区免费| 久久久久亚洲AV综合波多野结衣| 天堂在线免费观看| 亚洲精品视频免费看| 日韩在线免费播放| 久久久精品视频免费观看| 亚洲精品福利视频| 免费无码不卡视频在线观看| 黄色a三级三级三级免费看| 亚洲午夜久久久久久久久电影网| 日韩精品极品视频在线观看免费| 亚洲一区在线视频| 日韩精品电影一区亚洲| 久久精品免费观看国产| 亚洲av无码偷拍在线观看| 亚洲午夜久久久久久久久久| 亚洲成在人线aⅴ免费毛片| 免费激情网站国产高清第一页 | 成人毛片18岁女人毛片免费看| 欧洲亚洲综合一区二区三区| 亚洲无线电影官网| 四虎永久在线精品视频免费观看| 国产在线观看无码免费视频|