php如何按需載入方式來增加程式的靈活度

2020-07-16 10:04:20

設計模式的命名啊什麼的,我基本上已經忘記得差不多了,我就把我現在表述的這個東西叫做按需載入吧。

需求:

1.我希望有一個組態檔讀寫類,不需要修改原本這個組態檔讀寫類就可以實現擴充套件;

2.這個擴充套件是比如我原本的設定是txt格式的,但現在我的設定類是php或者是xml等,也可能是json

3.呼叫介面統一,不管什麼型別的組態檔,我呼叫同樣的 一個檔案設定讀寫類就可以了,防止後續的程式碼很難維護。

那麼:

1.首先,想到的是定義一個抽象類,不斷的繼承,通過繼承不用修改這個組態檔讀寫類;

2.但是,我就不能統一使用這個組態檔讀取類了,我呼叫的是我繼承後的這個類;

實現思想:

好了,廢話了那麼多,我這裡就來說一下我的實現思路,其實整個思路還是挺簡單的;

/**
 * 定義組態檔讀寫類,所有的組態檔讀寫呼叫此類就可以了,統一介面
 */
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);
    }
    // 獲取實際操作物件範例
    public function getInstance($type = 'txt') {
        $class_name = ucfirst($type).'Config'; // 根據檔案格式範例化具體的操作類
        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;
    }
}
// 定義一個基礎操作介面類,後續的檔案讀寫必須繼承這個規範
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) {}
}
// 其他組態檔讀寫類。。。

以上的程式碼我沒測試過,我表達的僅僅是一個思想,當然,基於這種思想還可以設計出更加靈活,可以增加一個陣列設定來定義不同的檔案分別採用哪個類來讀寫,時間關係,這個問題後續有時間再更新。

以上就是php如何按需載入方式來增加程式的靈活度的詳細內容,更多請關注TW511.COM其它相關文章!