<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      巧用PHP中__get()魔術(shù)方法

      PHP中的魔術(shù)方法有很多,這些魔術(shù)方法可以讓PHP腳本在某些特定的情況下自動調(diào)用。比如 __construct() 每次實例化一個類都會先調(diào)用該方法進(jìn)行初始化。這里我們講一下__get() 魔術(shù)方法的使用。讀取不可訪問屬性的值時,__get() 會被調(diào)用。也就是,當(dāng)想要獲取一個類的私有屬性,或者獲取一個類并為定義的屬性時。該魔術(shù)方法會被調(diào)用。

      下面有段代碼:

      class Model
      {
      
         //不存在的成員屬性自動調(diào)用
        function __get($name) 
        {
               //自動加載數(shù)據(jù)庫
              if(substr($name, 0,2) =='db'){
                  $config = strtolower(substr($name, 2));
                  if(empty($this->objDb)){
                      $this->objDb = new LibDatabase($config);
                  }else{
                      $this->objDb->config($config);
                  }
                  return $this->objDb; 
              }
      
              // 自動加載redis
              if(substr($name, 0,5) =='redis'){
                  $config = strtolower(substr($name, 5));
                  if(empty($this->objRedis)){
                      $this->objRedis = new LibRedis($config);
                  }else{
                      $this->objRedis->config($config);
                  }
                  return $this->objRedis;
              }
      
              //自動加載excel插件
              if(substr($name, 0,5) =='excel'){
                  if(empty($this->objExcel)){
                      $this->objExcel = new LibExcel();
                  }
                  return $this->objExcel;
              }
              throw new LinkException("變量{$name}不被支持,請預(yù)先Model中定義",EXCEPT_CORE);
          }
      }
      
      ?>

       

      首先,該Model類有只有一個__get() 方法,沒有定義其他屬性,所有只要是訪問這個Model類的屬性,都會來調(diào)用這個__get() 方法。而傳入的參數(shù)$name就是想要調(diào)用Model類的屬性。

      其次,__get() 方法里有3個判斷,分別用于返回一個LibDatabase數(shù)據(jù)庫類和一個LibRedis緩存類和一個LibExcel 的Excel插件類的實例。

       

      假設(shè)$mod 是Model的一個對象。我們來分析以下三中情況:

      1、$mod->dbconfsys->getAll($sql);

      2、$mod->redisconfsys->get($key);

      3、$mod->excel->export($data);

      第一個:訪問Model類的dbconfsys屬性。但是Model類中并沒有該屬性。所以 __get() 的第一個判讀成立,那么會返回LibDatabase(‘confsys’)的實例。這里confsys其實是一個數(shù)據(jù)庫的配置。如果有多個數(shù)據(jù)庫的配置比如confadmin、conftest等,都可以使用dbconfadmin和dbconftest來實例化該數(shù)據(jù)庫的一個連接對象。當(dāng)然連接的處理以及數(shù)據(jù)處理是在LibDatabase里實現(xiàn)的。最后調(diào)用該實例的getAll方法執(zhí)行sql語句。

      第二個:訪問Model類的redisconfsys屬性,同理,此時 __get() 的第二個判斷成立。返回的是LibRedis(‘confsys’)的實例。這里的confsys則是一個redis的配置。像數(shù)據(jù)庫實例一樣,如果有多個配置,也是同樣的處理方式。最后調(diào)用該實例的get方法獲取某個鍵的值。

      第三個:訪問Model類的excel 屬性,此時__get() 的第三個判斷成立。返回的是LibExcel()的實例。最后調(diào)用export方法導(dǎo)出數(shù)據(jù)。

      這個Model類可以作為基礎(chǔ)的底層模型。然后系統(tǒng)中所有數(shù)據(jù)表的模型或者每個模塊功能的模型都繼承Model,同樣可以使用該Model的功能,這里需要注意的是每種對象的調(diào)用都需要先早Model中做好判斷處理。

      posted @ 2018-07-27 19:02  喜歡哲學(xué)的猴子  閱讀(8355)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人午夜伦理在线观看| 国产女高清在线看免费观看| 人妻另类 专区 欧美 制服| 亚洲综合在线亚洲优优色| 偷偷做久久久久免费网站| 国产成人不卡一区二区| 国产色婷婷亚洲99精品小说| 中国少妇嫖妓BBWBBW| 国产资源精品中文字幕| 国产精品无码a∨精品| 丝袜高潮流白浆潮喷在线播放| 亚洲aⅴ天堂av天堂无码麻豆| 久久免费偷拍视频有没有| 国产片一区二区三区视频| 久久免费看少妇免费观看| 亚洲欧美人成电影在线观看| 国产精品久久久久久福利| 亚洲中文字幕无码专区| 国产性色的免费视频网站| 国产一区二区黄色激情片| 久久国产乱子伦免费精品无码| 亚洲av日韩av中文高清性色| 午夜福利国产一区二区三区| 撕开奶罩揉吮奶头高潮AV| 四虎亚洲国产成人久久精品| 国产一区二区在线观看的| 国产成人一区二区三区在线| 亚洲成av人片天堂网无码| 国产精品亚洲综合第一页| 欧美牲交a欧美牲交aⅴ免费真| 中文字幕日韩精品有码| 久在线视频播放免费视频| 国产高潮国产高潮久久久| 天天干天天干| 成人国产片视频在线观看| 国产精品免费中文字幕| 国产成人精品2021欧美日韩| P尤物久久99国产综合精品| 亚洲成人av在线高清| 国产黄色一区二区三区四区| 蜜臀av黑人亚洲精品|