很差意思,因爲最近事情比較多,昨天的確沒有時間寫,今天恰好還有接近一個小時的時間,因此就繼續寫一篇。 php
不知道你們注意到沒有,以前咱們導入一個配置文件是經過include CONFIGS_PATH . '/config.php'來作的,這樣作好嗎? spa
不忙回答,我能夠提兩個問題: code
1. 若是這個路徑下面的config.php不存在會發生什麼現象? xml
2.若是我將PHP這種配置文件修改爲爲xml這種配置文件以後會發生什麼現象? blog
首先,若是文件不存在,那麼PHP會拋出一個警告,可是程序繼續執行;配置文件變成xml以後,入口文件處須要編寫相應的讀取xml的代碼,並且須要把以前的include CONFIGS_PATH . '/config.php'這句代碼修改掉。 ip
那麼有沒有方法可以實現配置文件的無縫切換呢? get
在具體講解這些以前,我首先說一下工廠模式,現假設:A須要購買一輛紅色汽車,他直接向B(一個生產汽車的工廠)提出需求,B按照A的需求,從倉庫中選取一輛合適的汽車,而後交給A。整個過程,A只是提出需求,具體汽車的選取是由B工廠來肯定的,這種方式就是工廠模式。 it
舉個例子: io
<?php public class Factory { public static function factory($whichOneToChoose) { $returnVal = 'Red'; switch($whichOneToChoose) { case 1 : $returnVal = 'Blue'; break case 2 : $returnVal = 'Green'; break; default : break; } return $returnVal; } }工廠模式通常都有一個靜態的方法:factory負責邏輯的處理。
如今咱們能夠新建一個專門處理配置文件的類:Config.php function
<?php class Config { const XML = 1; const INI = 2; const PHP = 3; public static function factory($which) { switch($which) { case Config::XML : return XmlConfig::parse(CONFIGS_PATH . '/config.xml'); break; case Config::INI : return IniConfig::parse(CONFIGS_PATH . '/config.ini'); break; case Config::PHP : //此處沒有作文件是否存在的斷定,你能夠本身斷定一下,我只是作一個例子 return include CONFIGS_PATH . '/config.php'; break; default : return array(); break; } } }
若是你要將配置文件修改爲爲xml這種方式,只須要在XmlConfig.php中實現便可,固然,爲了簡單,我在這兒只是實現ini配置文件的編寫,xml的配置文件你能夠本身去嘗試一下,若是你想查看具體實現,能夠查看Toper中的/Library/Toper/Config/XmlConfig.class.php的具體代碼。
<?php class XmlConfig { public static function parse($file) { if(!is_file($file)) { throw new Exception('none exists xml config file'); } else { return parse_ini_file($file,true); } } }
這個文件的代碼是我隨手寫的,不保證代碼的正確性,瞭解思路便可。
今天的例子點此下載