※ 本文為 dinos 轉寄自 ptt.cc 更新時間: 2013-07-12 23:29:10
看板 PHP
作者 標題 Re: [請益] class繼承問題
時間 Fri Jul 12 20:06:28 2013
※ 引述《htl74421 (<><魚仔<>< 薰~)》之銘言:
: 我目前的疑惑是這樣:
: class grandfather { //祖父
: public function grandfather()
: {
: //
: }
: public function get_data()
: {
: echo 'hello';
: }
: }
: class father extends grandfather { //爸爸
: public function father()
: {
: //
: }
: }
: class child extends father{ //小孩
: public function child()
: {
: //
: }
: public function test()
: {
: parent::get_data();
: }
: }
: $a = new child();
: $a->test();
恕刪...
我覺得這不是OO相性的問題,而是設計模式錯了
一直繼承並不是個好例子
你可以用骨架模式或裝飾者模式來進行
abstract class 人猿{
public 對像;
public function 結婚($model);
}
class 阿公 extends 人猿{
public function gf(){
}
}
class 阿爸 extends 阿公{
public function father(){
}
}
class 死囡仔 extends 阿爸{
public function child(){
}
public function 結婚($model){
$this->對像 = model;
}
}
interface i瘦女人{
public function 生子();
}
interface i有兇女{
public function 嘿嘿();
}
class 女人甲 implements i瘦女人{
public function 生子(){
return 生一個;
}
}
class 女人乙 implements i瘦女人, i有兇女{
public function 嘿嘿(){
return 傳教士;
}
public function 生子(){
return 生兩個;
}
}
=============================================
開工
各個不同代的人應該要再區別他們的偏好,在同樣行為下,但是有不同的目的
$cm30 = new 死囡仔;
$marry1 = $cm30->結婚(new 女人乙);
$marry1->對像->嘿嘿(); //嘿嘿
$marry1->對像->生子();
這也是為什麼JAVA的書一直提到
"多用合成,少用繼承" 的原因...
p.s 回原PO問題
你應該就是要有相同結婚的行為
但要的結果或目的是又可擴充選擇的
那麼就可以以"女人"interface來做同樣行為下不同的邏輯結構,演算
做出不同
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.34.4.90
※ 編輯: dlikeayu 來自: 1.34.4.90 (07/12 20:24)
推 :abst"r"act,修一下。1F 07/12 21:00
OK!※ 編輯: dlikeayu 來自: 1.34.4.90 (07/12 21:10)
--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 108
回列表(←)
分享