php對象設計進階

來源:互聯網
上載者:User
物件導向和面向過程

物件導向和過程式編程的核心區別就是職責分配

過程式代碼錶現的行為就是一系列命令和方法的連續調用,控制碼根據不同的條件執行不同的職責代碼。這種自頂向下的控制方式導致了重複和相互依賴的代碼遍佈於整個項目。

物件導向編程則將職責從用戶端代碼中轉移到專門的對象中,盡量減少相互依賴。

執行個體說明物件導向和面向過程

首先,面對這樣一個需求,寫一個讀取檔案組態工具。
設定檔的格式如下
key:value

面向過程的方式

此時需求明確,實現也簡單,兩個函數搞定

此時代碼較為緊湊且易於維護,但生活不可能一直都是一帆風順,現在需求變更,需要新增一個支援xml檔案讀取、寫入的功能。

此時我們假設,加入if判斷xml尾碼檔案來執行xml的讀取、寫入的方法?這樣read和write函數都要判斷條件,我們需要改兩處地方,如下。

function readParams( $sourceFile ) { $params = []; if (preg_match( "/\.xml$/i", $sourceFile )) { // 執行xml方式的讀取檔案配置方法 } else { // 執行txt方式的讀取檔案配置方法 } return $params;}function writeParams( $params, $sourceFile ) { if ( preg_match( "/\.txt$/i", $sourceFile )) { // 執行寫xml的寫檔案配置方法 } else { // 執行寫txt的寫檔案配置方法 }}

從上面的修改就可以看出,假如需要支援更多的檔案格式,就需要在read和write兩處方法內分別添加來保持資料處理的一致性

物件導向方式

//定義一個抽象的讀寫類abstract class ParamHandler { protected $sourceFile; protected $params = []; function __construct( $source ) { $this->sourceFile = $source; } function addParams( $key, $val ) { $this->params[$key] = $val; } function getAllParams() { return $this->params; } //該處驗證傳入的檔案類型,然後返回相應操作的對象 static function getInstance( $filename ) { if ( preg_match("/\.xml$/i", $filename) ) { return new XmlParseHandler( $filename ); } return new TextParseHandler( $filename ); } abstract function write(); abstract function read();}//定義具體xml的實現子類class XmlParseHandler extends ParamHandler { function write() { //實現xml的寫方法 } function read() { //實現xml的讀方法 }}

以上就介紹了php對象設計進階,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.