#PHP 類的多繼承實現之 traits.md
TRAIT
PHP本身是並不支持多繼承的,也就是,一個類只能繼承一個類,為了滿足業務需求,後來有了一些解決方法,例如,鏈式繼承,B繼承A,然後C繼承B,這樣,C就同時繼承了AB, 此外還有接口,因為接口其實和抽象類很像,同一個類可以實現多個接口,利用接口的此特性,我們也能實現多繼承。
但是,自 PHP 5.4.0 起,PHP 實現了代碼復用的一個方法,稱為 Traits,它能夠幫我們更加便捷的實現類的多繼承。
實例1
<?php
trait A{
public function testA(){
echo "<br>";
echo "testA call";
}
}
trait B{
public function testB(){
echo "<br>";
echo "testB call";
}
}
trait C{
public function testC(){
echo "<br>";
echo "testC call";
}
}
class D{
use A,B,C;
}
$cls = new D();
$cls->testA();
$cls->testB();
$cls->testC();
?>
#輸出
testA call
testB call
testC call
實例2
<?php
class E{
public function testE(){
echo "<br>";
echo "testE call";
}
}
trait F{
public function testF(){
echo "<br>";
echo "testF call";
}
}
class G extends E{
use F;
}
$cls = new G();
$cls->testE();
$cls->testF();
?>
#輸出
testE call
testF call
實例3
<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
以上例程會輸出:
Hello World!
trait 有一個魔術常量,
__TRAIT__
,用於在相應trait中打印當前trait的名稱。