作者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
1F:推 CaptainH:Trait 12/10 14:37
2F:→ LaPass:PHP 5.4.0 ..... 还蛮新的,感谢关键字,这好东西 XD 12/10 14:48
3F:→ LaPass:这个案子的server不够新,不能用,哀伤.... orz... 12/10 15:03
4F:推 gpmm:可以直接推 Idiorm / Paris 吗 XD 12/10 15:29
5F:推 liaosankai:Idiorm 的 ORM 还满像 Kohana 的 ORM 用法 12/10 22:58
6F:→ LaPass:那两个没用过.... 改天来看看 12/11 12:30
7F:推 j87b0003:你可以参考一下CI里的db类别作法,在实作上的话我习惯用 12/11 15:17
8F:→ mmis1000:用动态方法呢?用一个方法当入口,依参数切换目标 12/11 15:17
9F:→ j87b0003:一个libraries来呼叫db(model),滤资料後传给controller 12/11 15:18