作者LaPass (LaPass)
看板PHP
標題[請益] 多重繼承怎麼解?
時間Tue Dec 10 14:35:12 2013
如標題
目前正在做資料表的操作物件
想把一些常用的功能獨立出來寫
例如刪除、排序等等
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