1. 程式人生 > >PHP的trait實現了程式碼的複用並且突破了單繼承的限制

PHP的trait實現了程式碼的複用並且突破了單繼承的限制

<?php
/**
 * Created by PhpStorm.
 * User: 
 * Date: 2018/12/6
 * Time: 14:47
 */
/**
 * trait實現了程式碼的複用
 * 並且突破了單繼承的限制
 * trait不是類,不能例項化
 */
/**
 * trait實現了程式碼的複用優先順序問題
 * 1.當父類中的方法與trait類,父類中的方法重名了
 * 2.本類中方法優先順序最高,trait的優先順序大於父類的同名方法優先順序
 * 3.trait類中有多個同名的方法,怎麼辦
 */
trait Demo1
{
    public function hello()
    {
        return __METHOD__;
    }
}
trait Demo2
{
    public function hello()
    {
        return __METHOD__;
    }
}

class Test{
    public function hello()
    {
        return __METHOD__;
    }
}

class Demo extends Test
{
    //等價於把hello1,hello2方法複製進來
    use Demo1,Demo2{
        //trait類中有多個同名的方法,怎麼辦
        Demo1::hello insteadof Demo2;
        Demo2::hello as Demo2Hello;
    }

    /*public function hello()
    {
        return __METHOD__;
    }*/

    public function test1()
    {
        return $this->hello();
    }

    public function test2()
    {
        return $this->Demo2Hello();
    }

}

$obj = new Demo();
echo $obj->test1();
echo $obj->test2();