traits與interfaces有什麼區別?

2020-07-16 10:06:26

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其它相關文章!