欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

一步步编写PHP的Framework(六)

程序员文章站 2022-06-15 21:04:34
...
不知道大家注意到没有,之前我们导入一个配置文件是通过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

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

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

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 }

这个文件的代码是我随手写的,不保证代码的正确性,了解思路即可。