traits與interfaces的差別是:1、trait類似include,可以用use放在類別中間,定義的方法作為class的一部分,本身不能直接實例化;2、interface裡面的方法都是虛擬的,需要在繼承的時候對這些方法進行重定義。
traits與interfaces的差別是:
1、trait
看起來比較像是為了程式碼的複用而寫的一個小插件,它類似include,可以用use放在類別中間,讓trait裡面定義的方法作為class的一部分,本身不能直接實例化。
2、interface
裡面的方法都是虛擬的,需要在繼承的時候對這些方法進行重定義。也就是說,方法是說明性質的,並沒有實際操作,而你在繼承的時候,需要實作這些方法,不然就會出錯,而且不能缺失。 interface常用於架構的時候,對一個實例所擁有的屬性和方法進行抽象定義。簡單來講類似一個協議,就是老闆下達的任務。你要繼承的話,必須滿足這個協議,也就是完成老闆下達的任務。
<?php trait MyTrait { protected $var = 'MyTrait_var'; protected $var1 = 'MyTrait_var'; function __construct() { echo $this->var."</br>"; } function a() { echo "a"."</br>"; } } interface MyInterface { function __construct(); function b(); } abstract class MyAbstract { protected $var2 = 'MyAbstract_var'; use MyTrait; function b() { echo "b"."</br>"; } } class MyClass extends MyAbstract implements MyInterface { protected $var3 = 'MyClass_var'; function c() { echo "c"."</br>"; } } $class = new MyClass(); $class->a(); $class->b(); $class->c();
以上程式碼中,MyAbstract中的function b()
也可以放在MyClass
中,或是由MyAbstract實作介面MyInterface
#相關學習推薦:PHP程式設計從入門到精通
以上是traits與interfaces有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!