一步步编写简单的PHP的Framework(六)
2016-07-28 00:00
531 查看
不好意思,由于最近事情比较多,昨天的确没有时间写,今天刚好还有接近一个小时的时间,所以就继续写一篇。
不知道大家注意到没有,之前我们导入一个配置文件是通过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工厂来确定的,这种方式就是工厂模式。
举个例子:
工厂模式一般都有一个静态的方法:factory负责逻辑的处理。
现在我们可以新建一个专门处理配置文件的类:Config.php
如果你要将配置文件修改成为xml这种方式,只需要在XmlConfig.php中实现即可,当然,为了简单,我在这儿只是实现ini配置文件的编写,xml的配置文件你可以自己去尝试一下,如果你想查看具体实现,可以查看Toper中的/Library/Toper/Config/XmlConfig.class.php的具体代码。
这个文件的代码是我随手写的,不保证代码的正确性,了解思路即可。
今天的例子点此下载
不知道大家注意到没有,之前我们导入一个配置文件是通过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工厂来确定的,这种方式就是工厂模式。
举个例子:
<?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
<?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); } } }
这个文件的代码是我随手写的,不保证代码的正确性,了解思路即可。
今天的例子点此下载
相关文章推荐
- 开源内容管理系统Joomla3.5发布 基于PHP 7
- PHP 将 html 导出到 word
- laravel request 类里 get方法和input的方法的区别?
- php中echo/print/print_r()/var_dump()的区别
- mac电脑下的php开发环境配置
- [置顶]showSetPwdDialog--自定义对话框
- PHP面向对象高级特性
- **YII**系列三建立表单
- 总结2
- php通过接口获取到json数据用json_decoe出现Syntax error原因
- php设计模式之简单工厂模式
- php设计模式之策略模式
- php设计模式之观察者模式
- php设计模式之单例模式
- php单例模式的常见应用场景
- **YII** 系列二yii的基本理解
- laravel5数据库操作
- **YII** 系列一理论知识
- 已有模板与tp框架的结合 (前台)
- tp模板基础