怎麼一步步編寫簡單的PHP的Framework(六)

      很差意思,因爲最近事情比較多,昨天的確沒有時間寫,今天恰好還有接近一個小時的時間,因此就繼續寫一篇。 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);
		}
	}
}

        這個文件的代碼是我隨手寫的,不保證代碼的正確性,瞭解思路便可。

        今天的例子點此下載

相關文章
相關標籤/搜索