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
以上就是traits與interfaces有什麼區別?的詳細內容,更多請關注TW511.COM其它相關文章!