[PHP] trait | interface | abstract 比較

interface abstract trait
  1. 規範子類/子介面一定要具備某些東西,包含變數與function
  2. 可以被多重 繼承(extends),子介面會擁有父母們的所有規範。但父母們之間的function不能重名。
  3. interface裡只能有public function,且都是空的。
  4. 可以有 constant ,但不能被override
  5. implement 的時候,必須 override所有的fucntion
  6. 不能直接 new 出來,要先有 class 去implement 它.
  1. abstract class不能直接new 出來
  2. 只要class 裡面有 abstract function,就必須被宣告為 abstract class
  3. 繼承(extends)時,子類必須定義父類中的所有abstract function
  4. 子類所繼承的function所需引用的參數只能增加(可選參數),不能減少
  1. PHP5.4 才出現
  2. 用來減少重複程式碼的狀況產生,通常是許多不同的 class 間 共通的某些 function,便於直接使用而不用考慮繼承問題。例如 "人" 跟 "狗" 都可以 "叫",但兩者沒有繼承關係
  3. 使用上,直接在 class 裡 use 即可