2006年12月3日

學習 PHP5 語言動態性的入門文章

Tags: magic_method 動態語言 refactoring agile-method ORM

從 PHP4 到 PHP5 , PHP 不只改善了個體 (object) 的成員保護程度,也引入了 PHP 稱為「magic methods」的特殊行為。 Magic methods 提昇了 PHP 的動態性,活用 magic methods 可以大幅減少程式碼中類似的重覆行為,並為 programmer 帶來更開放與直觀的程式撰寫彈性。


日前在 developerWorks 搜到了一篇介紹 magic methods 的好文章,《Going dynamic with PHP - Add flexibility to your application with dynamic objects》。作者藉由程式重整 (refactoring) 的方式,逐步將舊式的 php code 以 PHP v5 的語法功能改寫,使讀者在重整過程中體會新語法之動態性帶來的優點。

Magic methods 的概念在動態語言如 Python, Ruby, PHP 之中很普遍,應用最廣的是 getter, setter 和 caller (在 C++/Java/C# 則尚未在語言層級中予以充分支援。)。《Classes and Objects (PHP 5)::Overloading》說明了這三種行為在 PHP 中的使用方式與時機。

於《Going dynamic with PHP》一文中,作者一開始先用舊式語法實作了一個資料表類別 Book ,接著覆載 __call method ,將資料表成員的存取行為動態化,再覆載 __get, __set methods ,將資料表成員的存取行為內隱化 (implicationalization)。

運用 magic methods 重整 (refactor) 程式碼的結果,使我們從一個用途有限的 Book 類別中精煉出一個泛用的 DBObject 類別。這是一個符合 CRUD 典型 (Create, Read, Update, Delete 是四種資料基本存取行為,幾乎所有資料表類別都會實作這四種行為,從中發展出 ORM 的 pattern/form 實踐方式) 的資料表類別,而且它不是一個抽象類別 (abstract class)。這意味著我們可以直接用 DBObject 映射一個新增的資料表,而不需描述其細節 (不用多寫宣告與定義的程式碼)。儘管在引入 magic methods 之前,我們仍然可以實踐 CRUD 樣式,但無法用如此簡潔的程式碼完成這份工作。


Posted by shirock at 樂多Roodo! │15:32 │回應(0)引用(1)PHP
樂多分類:網路/3C 共同主題:PHP基本語法 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/2541636
引用列表:
本文說明如何活用 Magic methods 重整 (refactoring) 程式碼。讓 PHP 的程式碼更易於使用。
活用 PHP5 的 magic methods - __set(), __get() and __call()【石頭閒語】 at 2007年01月31日 02:05