[請益] 多重繼承怎麼解?

看板PHP作者 (LaPass)時間12年前 (2013/12/10 14:35), 編輯推噓4(405)
留言9則, 6人參與, 最新討論串1/1
如標題 目前正在做資料表的操作物件 想把一些常用的功能獨立出來寫 例如刪除、排序等等 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

12/10 14:37, , 1F
Trait
12/10 14:37, 1F

12/10 14:48, , 2F
PHP 5.4.0 ..... 還蠻新的,感謝關鍵字,這好東西 XD
12/10 14:48, 2F

12/10 15:03, , 3F
這個案子的server不夠新,不能用,哀傷.... orz...
12/10 15:03, 3F

12/10 15:29, , 4F
可以直接推 Idiorm / Paris 嗎 XD
12/10 15:29, 4F

12/10 22:58, , 5F
Idiorm 的 ORM 還滿像 Kohana 的 ORM 用法
12/10 22:58, 5F

12/11 12:30, , 6F
那兩個沒用過.... 改天來看看
12/11 12:30, 6F

12/11 15:17, , 7F
你可以參考一下CI裡的db類別作法,在實作上的話我習慣用
12/11 15:17, 7F

12/11 15:17, , 8F
用動態方法呢?用一個方法當入口,依參數切換目標
12/11 15:17, 8F

12/11 15:18, , 9F
一個libraries來呼叫db(model),濾資料後傳給controller
12/11 15:18, 9F
文章代碼(AID): #1IfhOaX- (PHP)
文章代碼(AID): #1IfhOaX- (PHP)