不知道大家注意到沒有,之前我們匯入一個設定檔是通過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工廠來確定的,這種方式就是原廠模式。
舉個例子:
02 |
public class Factory { |
03 |
public static function factory($whichOneToChoose) { |
05 |
switch($whichOneToChoose) { |
原廠模式一般都有一個靜態方法:factory負責邏輯的處理。
現在我們可以建立一個專門處理設定檔的類:Config.php
06 |
public static function factory($which) { |
09 |
return XmlConfig::parse(CONFIGS_PATH . '/config.xml'); |
12 |
return IniConfig::parse(CONFIGS_PATH . '/config.ini'); |
15 |
//此處沒有做檔案是否存在的判定,你可以自己判定一下,我只是做一個例子 |
16 |
return include CONFIGS_PATH . '/config.php'; |
如果你要將設定檔修改成為xml這種方式,只需要在XmlConfig.php中實現即可,當然,為了簡單,我在這兒只是實現ini設定檔的編寫,xml的設定檔你可以自己去嘗試一下,如果你想查看具體實現,可以查看Toper中的/Library/Toper/Config/XmlConfig.class.php的具體代碼。
03 |
public static function parse($file) { |
05 |
throw new Exception('none exists xml config file'); |
07 |
return parse_ini_file($file,true); |
這個檔案的代碼是我隨手寫的,不保證代碼的正確性,瞭解思路即可。