一步步編寫PHP的Framework(六)

來源:互聯網
上載者:User

 

不知道大家注意到沒有,之前我們匯入一個設定檔是通過include CONFIGS_PATH . '/config.php'來做的,這樣做好嗎?

       不忙回答,我可以提兩個問題:

       1. 如果這個路徑下面的config.php不存在會發生什麼現象?

       2.如果我將PHP這種設定檔修改成為xml這種設定檔之後會發生什麼現象?

       首先,如果檔案不存在,那麼PHP會拋出一個警告,但是程式繼續執行;設定檔變成xml之後,入口檔案處需要編寫相應的讀取xml的代碼,而且需要把之前的include CONFIGS_PATH . '/config.php'這句代碼修改掉。

        那麼有沒有方法能夠實現設定檔的無縫切換呢?

        在具體講解這些之前,我首先說一下原廠模式,現假設:A需要購買一輛紅色汽車,他直接向B(一個生產汽車的工廠)提出需求,B按照A的需求,從倉庫中選取一輛合適的汽車,然後交給A。整個過程,A只是提出需求,具體汽車的選取是由B工廠來確定的,這種方式就是原廠模式。

       舉個例子:

01 <?php
02 public class Factory {
03     public static function factory($whichOneToChoose) {
04         $returnVal = 'Red';
05         switch($whichOneToChoose) {
06             case1 :
07                 $returnVal = 'Blue';
08                 break
09             case 2 :
10                 $returnVal = 'Green';
11                 break;
12             default :
13                 break;
14         }
15         return $returnVal;
16     }
17 }

       原廠模式一般都有一個靜態方法:factory負責邏輯的處理。

 

        現在我們可以建立一個專門處理設定檔的類:Config.php

01 <?php
02 class Config {
03     const XML = 1;
04     const INI = 2;
05     const PHP = 3;
06     public static function factory($which) {
07         switch($which) {
08             caseConfig::XML :
09                 return XmlConfig::parse(CONFIGS_PATH . '/config.xml');
10                 break;
11             case Config::INI :
12                 return IniConfig::parse(CONFIGS_PATH . '/config.ini');
13                 break;
14             case Config::PHP :
15                 //此處沒有做檔案是否存在的判定,你可以自己判定一下,我只是做一個例子
16                 return include CONFIGS_PATH . '/config.php';
17                 break;
18             default:
19                 return array();
20                 break;
21         }
22     }
23 }

 

       如果你要將設定檔修改成為xml這種方式,只需要在XmlConfig.php中實現即可,當然,為了簡單,我在這兒只是實現ini設定檔的編寫,xml的設定檔你可以自己去嘗試一下,如果你想查看具體實現,可以查看Toper中的/Library/Toper/Config/XmlConfig.class.php的具體代碼。

01 <?php
02 class XmlConfig {
03     public static function parse($file) {
04         if(!is_file($file)) {
05             throw new Exception('none exists xml config file');
06         } else {
07             return parse_ini_file($file,true);
08         }
09     }
10 }

        這個檔案的代碼是我隨手寫的,不保證代碼的正確性,瞭解思路即可。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.