PHP 物件導向 (十)Traits

一句話兒發表於2020-01-18

作用:解決程式碼複用問題,解決單一繼承問題

與普通類的異同

  • 相同點
    1. trait 能夠像普通的類一樣定義屬性,方法(包含抽象的、靜態的)
    2. trait 引入到基類裡面,其子類裡面也能訪問trait裡面的屬性和方法。
  • 不用點
    1. trait不用例項化就能訪問定義的普通方法以及屬性。
    2. trait裡面不能定義建構函式。
細節
  1. Trait中的方法或屬性會覆蓋 基類中的同名的方法或屬性,而本類會覆蓋Trait中同名的屬性或方法
  2. 一個類可以組合多個Trait,透過逗號相隔
  3. 解決不同trait同名衝突,使用別名
<?php
Trait TraitOne {
    public $propertyOne = 'argumentOne';

    public function sayHello()
    {
        return 'My trait one';
    }
}

Trait TraitTwo {
    public function sayHello()
    {
        return 'My Trait Two';
    }
}

class MyClass {

    use TraitOne, TraitTwo {

        TraitTwo::sayHello insteadof TraitOne;  //指定要使用的trait

        Traittwo::sayHello as twoSayHello; //同方法名的trait設定別名

    }

    public function traitMethodValue()
    {
        return $this->twoSayHello();   //呼叫trait別名方法
    }
}

$myClass = new MyClass();
echo $myClass->twoSayHello();

class MyClassSon extends MYClass {

}

$myClass = new MyClassSon();
echo $myClass->twoSayHello(); //traits方法可以被繼承

複製程式碼,即可執行。 謝謝你的瀏覽,如有錯誤,歡迎指正哈!!!

本作品採用《CC 協議》,轉載必須註明作者和本文連結
寫的不好,就當是整理下思緒吧。

相關文章