大家好
 
大家都知道,PHP預設是不支援 多繼承的特性,多繼承的特性是什麼?
 
struct base1{
   int v1;
   void foo1(int){}
}
struct base2{
   int v2;
   void foo2(int){}
}
struct derive: base1,base2{
};


 
所以其實會用到多繼承的語言並不多,就算是 JAVA 也不能直接多繼承,那如果在PHP想要在一個類別中使用多類別的函式該怎麼做比較好呢?
 
可以用 Traits
 
Traits 有點類似繼承的概念
基本使用方式:
 
<?php
trait testB {
    function getB1()
    {
        echo 'B1';
    }
}

class testA {
    use testB;
}

$testAB = new testA;
$testAB->getB1(); //B1
?>


 
跟繼承一樣,如果母類別已經有命名,則會以母類別為準
 
<?php
trait testB {
    function getB1()
    {
        echo 'B1';
    }
}

class testA {
    use testB;
    function getB1()
    {
        echo 'AB1';
    }
}

$testAB = new testA;
$testAB->getB1(); //AB1
?>


 
但是如果呼叫parent,則無法呼叫,會出現  has no parent 的 Fatal error
 
<?php
trait testB {
    function getB1()
    {
        echo 'B1';
    }
}

class testA {
    use testB;
    function getB1()
    {
        parent::getB1();
    }
}

$testAB = new testA;
$testAB->getB1();//錯誤
?>


 
也就是說,Traits 是類似繼承,但是更好的說法是 "擴充",給大家參考囉,感恩。