看板 PHP 關於我們 聯絡資訊
如標題 目前正在做資料表的操作物件 想把一些常用的功能獨立出來寫 例如刪除、排序等等 abstract class Delete{ function __construct($tablename) { 紀錄table名稱以及用來排序的欄位名稱 } function delete($id) { SQL操作 .... } } abstract class Sortable{ function __construct($tablename) { 紀錄table名稱以及用來排序的欄位名稱 } function sort($id) { SQL操作.... } function shift($fromid,$toid) { } } 然後,如果我有個Cat的資料表,希望要有刪除、排序兩個功能 我就只要繼承這兩個class就好 class Cat extance Delete,Sortable { function __construct() { parent::__construct("Cat"); } //什麼都不用寫就有刪除、排序的功能了 } 當然,這只是理論上 因為最近的物件導向語言,都為了避免死亡鑽石,而不提供多重繼承的功能 PHP當然也不例外 那,請問..... 如果想要實現這樣的功能的話 該怎麼寫? 雖然一般物件導向會意見用 interfaces 但我就是不想寫這麼多次 delete才會想要這樣用 另一種我目前用的折衷方式就是變成這樣 class Cat { var $del; function __construct() { $this->del=new Deleteable(); } function delete($id) { $this->del->delete($id); } } 但問題是,如果我哪天打算在Deleteable上新增或是刪除function 就得到每個用到Deleteable的class中新增刪除的function 這並不是理想的方式 請問有辦法解決這個問題嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.36.2
CaptainH:Trait 12/10 14:37
LaPass:PHP 5.4.0 ..... 還蠻新的,感謝關鍵字,這好東西 XD 12/10 14:48
LaPass:這個案子的server不夠新,不能用,哀傷.... orz... 12/10 15:03
gpmm:可以直接推 Idiorm / Paris 嗎 XD 12/10 15:29
liaosankai:Idiorm 的 ORM 還滿像 Kohana 的 ORM 用法 12/10 22:58
LaPass:那兩個沒用過.... 改天來看看 12/11 12:30
j87b0003:你可以參考一下CI裡的db類別作法,在實作上的話我習慣用 12/11 15:17
mmis1000:用動態方法呢?用一個方法當入口,依參數切換目標 12/11 15:17
j87b0003:一個libraries來呼叫db(model),濾資料後傳給controller 12/11 15:18