首頁 >後端開發 >PHP問題 >traits與interfaces有什麼差別?

traits與interfaces有什麼差別?

coldplay.xixi
coldplay.xixi原創
2020-07-01 15:43:023760瀏覽

traits與interfaces的差別是:1、trait類似include,可以用use放在類別中間,定義的方法作為class的一部分,本身不能直接實例化;2、interface裡面的方法都是虛擬的,需要在繼承的時候對這些方法進行重定義。

traits與interfaces有什麼差別?

traits與interfaces的差別是:

1、trait看起來比較像是為了程式碼的複用而寫的一個小插件,它類似include,可以用use放在類別中間,讓trait裡面定義的方法作為class的一部分,本身不能直接實例化。

2、interface裡面的方法都是虛擬的,需要在繼承的時候對這些方法進行重定義。也就是說,方法是說明性質的,並沒有實際操作,而你在繼承的時候,需要實作這些方法,不然就會出錯,而且不能缺失。 interface常用於架構的時候,對一個實例所擁有的屬性和方法進行抽象定義。簡單來講類似一個協議,就是老闆下達的任務。你要繼承的話,必須滿足這個協議,也就是完成老闆下達的任務。

<?php
trait MyTrait
{
    protected $var = &#39;MyTrait_var&#39;;
    protected $var1 = &#39;MyTrait_var&#39;;
 
    function __construct()
    {
        echo $this->var."</br>";
    }
 
    function a()
    {
        echo "a"."</br>";
    }
}
 
interface MyInterface
{
    function __construct();
    function b();
}
 
abstract class MyAbstract
{
    protected $var2 = &#39;MyAbstract_var&#39;;
    use MyTrait;
 
    function b()
    {
        echo "b"."</br>";
    }
}
 
class MyClass extends MyAbstract implements MyInterface
{
    protected $var3 = &#39;MyClass_var&#39;;
    function c()
    {
        echo "c"."</br>";
    }
}
 
$class = new MyClass();
$class->a();
$class->b();
$class->c();

以上程式碼中,MyAbstract中的function b()也可以放在MyClass中,或是由MyAbstract實作介面MyInterface

相關學習推薦:PHP程式設計從入門到精通

#

以上是traits與interfaces有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn