php按需加载方式来增加程序的灵活度
設(shè)計(jì)模式的命名啊什么的,我基本上已經(jīng)忘記得差不多了,我就把我現(xiàn)在表述的這個(gè)東西叫做按需加載吧。
需求:
1.我希望有一個(gè)配置文件讀寫類,不需要修改原本這個(gè)配置文件讀寫類就可以實(shí)現(xiàn)擴(kuò)展;
2.這個(gè)擴(kuò)展是比如我原本的配置是txt格式的,但現(xiàn)在我的配置類是php或者是xml等,也可能是json
3.調(diào)用接口統(tǒng)一,不管什么類型的配置文件,我調(diào)用同樣的 一個(gè)文件配置讀寫類就可以了,防止后續(xù)的代碼很難維護(hù)。
那么:
1.首先,想到的是定義一個(gè)抽象類,不斷的繼承,通過繼承不用修改這個(gè)配置文件讀寫類;
2.但是,我就不能統(tǒng)一使用這個(gè)配置文件讀取類了,我調(diào)用的是我繼承后的這個(gè)類;
實(shí)現(xiàn)思想:
好了,廢話了那么多,我這里就來說一下我的實(shí)現(xiàn)思路,其實(shí)整個(gè)思路還是挺簡(jiǎn)單的;
/*** 定義配置文件讀寫類,所有的配置文件讀寫調(diào)用此類就可以了,統(tǒng)一接口*/ class Config {// 讀public function read($file,$type = 'txt') {$instance = $this->getInstance($type);$instance->read($file);}// 寫public function write($file,$type = 'txt') {$instance = $this->getInstance($type);$instance->read($file);}// 刪public function delete($file,$type = 'txt') {$instance = $this->getInstance($type);$instance->read($file);}// 獲取實(shí)際操作對(duì)象實(shí)例public function getInstance($type = 'txt') {$class_name = ucfirst($type).'Config'; // 根據(jù)文件格式實(shí)例化具體的操作類if(class_exists($class_name)) {$instance = new $class_name;} else {throw new Exception('未定義'.$class_name);}if(is_subclass_of($instance,'BaseConfig') !== 1) {throw new Exception('配置文件讀寫類必須繼承BaseConfig');}return $instance;} } // 定義一個(gè)基礎(chǔ)操作接口類,后續(xù)的文件讀寫必須繼承這個(gè)規(guī)范 abstract class BaseConfig {abstract protected function read($file) {}abstract protected function write($file) {}abstract protected function delete($file) {} } // Text配置文件讀寫類 TxtConfig extends BaseConfig {public function read($file) {}public function write($file) {}public function delete($file) {} } // 其他配置文件讀寫類。。。以上的代碼我沒測(cè)試過,我表達(dá)的僅僅是一個(gè)思想,當(dāng)然,基于這種思想還可以設(shè)計(jì)出更加靈活,可以增加一個(gè)數(shù)組配置來定義不同的文件分別采用哪個(gè)類來讀寫,時(shí)間關(guān)系,這個(gè)問題后續(xù)有時(shí)間再更新。
總結(jié)
以上是生活随笔為你收集整理的php按需加载方式来增加程序的灵活度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载:第一次负责项目的总结
- 下一篇: ThinkPHP 3.2.3 视图模型的