PHP實現(xiàn)多繼承

方法一

自 PHP 5.4.0 起刊侯,PHP 實現(xiàn)了一種代碼復用的方法汁政,稱為 trait勉躺。

Trait 是為類似 PHP 的單繼承語言而準備的一種代碼復用機制侈百。Trait 為了減少單繼承語言的限制瓮下,使開發(fā)人員能夠自由地在不同層次結構內獨立的類中復用 method。Trait 和 Class 組合的語義定義了一種減少復雜性的方式钝域,避免傳統(tǒng)多繼承和 Mixin 類相關典型問題讽坏。

Trait 和 Class 相似,但僅僅旨在用細粒度和一致的方式來組合功能例证。 無法通過 trait 自身來實例化路呜。它為傳統(tǒng)繼承增加了水平特性的組合;也就是說织咧,應用的幾個 Class 之間不需要繼承胀葱。

從基類繼承的成員會被 trait 插入的成員所覆蓋。優(yōu)先順序是來自當前類的成員覆蓋了 trait 的方法笙蒙,而 trait 則覆蓋了被繼承的方法抵屿。

trait traitTestOne{
    public function test(){
        echo "This is trait one <br/>";
    }
    public function testOne(){
        echo "one <br/>";
    }
}
 
trait traitTestTwo{
//  public function test(){
//      echo "This is trait two";
//  }
    public function testTwo(){
        echo "two <br/>";
    }
}
 
class basicTest{
    public function test(){
        echo "hello world\n";
    }
}
class myCode extends basicTest{
    use traitTestOne,traitTestTwo;
}
 
$test = new mycode();
$test->test();
$test->testOne();
$test->testTwo();

輸出:

This is trait one
one
two

方法二

class Parent1 {
    function method1() {}
    function method2() {}
}
class Parent2 {
    function method3() {}
    function method4() {}
}
class Child {
    protected $_parents = array();
    public function Child(array $parents=array()) {
        $this->_parents = $parents;
    }
     
    public function __call($method, $args) {
        // 從“父類"中查找方法
        foreach ($this->_parents as $p) {
            if (is_callable(array($p, $method))) {
                return call_user_func_array(array($p, $method), $args);
            }
        }
        // 恢復默認的行為,會引發(fā)一個方法不存在的致命錯誤
        return call_user_func_array(array($this, $method), $args);
    }
}
$obj = new Child(array(new Parent1(), new Parent2()));
print_r( array($obj) );die;
$obj->method1();
$obj->method3();

方法三

interface testA{   
    function echostr();   
}    
interface testB extends testA{   
    function dancing($name);   
}    
class testC implements testB{   
  
    function echostr(){   
        echo "接口繼承捅位,要實現(xiàn)所有相關抽象方法轧葛!";   
        echo "<br>";   
    }    
  
    function dancing($name){   
        echo $name."正在跳舞!";    
    }    
}    
$demo=new testC();   
$demo->echostr();   
$demo->dancing("模特");
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末艇搀,一起剝皮案震驚了整個濱河市尿扯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焰雕,老刑警劉巖衷笋,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淀散,居然都是意外死亡右莱,警方通過查閱死者的電腦和手機蚜锨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慢蜓,“玉大人亚再,你說我怎么就攤上這事〕柯眨” “怎么了氛悬?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耘柱。 經常有香客問我如捅,道長,這世上最難降的妖魔是什么调煎? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任镜遣,我火速辦了婚禮,結果婚禮上士袄,老公的妹妹穿的比我還像新娘悲关。我一直安慰自己,他們只是感情好娄柳,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布寓辱。 她就那樣靜靜地躺著,像睡著了一般赤拒。 火紅的嫁衣襯著肌膚如雪秫筏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天挎挖,我揣著相機與錄音这敬,去河邊找鬼。 笑死肋乍,一個胖子當著我的面吹牛鹅颊,可吹牛的內容都是我干的敷存。 我是一名探鬼主播墓造,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锚烦!你這毒婦竟也來了觅闽?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涮俄,失蹤者是張志新(化名)和其女友劉穎蛉拙,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體彻亲,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡孕锄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年吮廉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畸肆。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡宦芦,死狀恐怖,靈堂內的尸體忽然破棺而出轴脐,到底是詐尸還是另有隱情调卑,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布大咱,位于F島的核電站恬涧,受9級特大地震影響,放射性物質發(fā)生泄漏碴巾。R本人自食惡果不足惜溯捆,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厦瓢。 院中可真熱鬧现使,春花似錦、人聲如沸旷痕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欺抗。三九已至售碳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绞呈,已是汗流浹背贸人。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留佃声,地道東北人艺智。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像圾亏,于是被迫代替她去往敵國和親十拣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容

  • 前言 眾所周知志鹃,一直以來PHP和很多語言一樣是單繼承的語言夭问,但是常常在編碼過程中,我們需要在當前類中使用兩個或兩個...
    金星show閱讀 1,844評論 0 3
  • 1曹铃、繼承單接口方式 2缰趋、繼承多接口方式 需要注意的是當你接口繼承其它接口時候,直接繼承父接口的靜態(tài)常量屬性和抽象方...
    半畝房頂閱讀 3,497評論 0 0
  • 今天是假期的最后一天,早晨起床后秘血,給自己做了頓早餐味抖,強迫自己慢悠悠的吃了三十分鐘,只是想讓時間在慢一點慢一點灰粮,慢到...
    角落里的蒙娜麗莎閱讀 155評論 2 2