2015-02-11 104 views
6

我正在尋找一個不難解答的問題的答案,但是我找不到一個類可以實現多少個接口。一個類可以在PHP中實現多少個接口?

這可能嗎?

class Class1 implements Interface1, Interface2, Interface3, Interface4 { 
    ..... 
} 

對於我找到的所有類似的例子,我已經看到,只有一個類可以實現2個接口。但是沒有關於我在找什麼的信息。

+2

只要這些接口中沒有衝突的方法名稱,我相信沒有實際的限制。 – 2015-02-11 13:11:10

回答

15

您可以實現的接口數沒有限制。按照定義,你只能有extend(繼承)一個類。

作爲一個實際問題,我會限制你實現的接口數量,以免你的課程變得過於笨重,因此很難處理。

+0

所以你說,這種方式是可能的? class class1 implements implements Interface1,Interface2,Interface3,Interface4 {' – 2015-02-11 13:15:09

+1

我認爲在實現數千個接口方面沒有問題。它使工作更容易。 – hek2mgl 2015-02-11 13:15:33

+0

@ArnasPečelis正確。你也可以命名空間你的接口 – Machavity 2015-02-11 13:20:39

0

類可以實現的接口數量不受邏輯限制。

3

我寫了一個腳本,上面的語句樣張(該金額不限):

<?php 

$inters_string = ''; 

$interfaces_to_generate = 9999; 

for($i=0; $i <= $interfaces_to_generate; $i++) { 
    $cur_inter = 'inter'.$i; 
    $inters[] = $cur_inter; 
    $inters_string .= sprintf('interface %s {} ', $cur_inter); 
} 

eval($inters_string); // creates all the interfaces due the eval (executing a string as code) 

eval(sprintf('class Bar implements %s {}', implode(',',$inters))); // generates the class that implements all that interfaces which were created before 

$quxx = new Bar(); 

print_r(class_implements($quxx)); 

您可以修改計數器VAR在for循環,使該腳本產生更多接口的實現班級「酒吧」。

它可以很容易地處理多達9999個接口(顯然更多),正如您從執行該腳本時從最後一行代碼行(print_r)的輸出中可以看到的那樣。

計算機的內存似乎是接口的數量,唯一的限制你所得到的內存耗盡錯誤時數過高

+1

感謝偉大的例子和內存實際上不是一個問題。 – 2017-05-16 17:48:22

0

你可以實現你想要的類,則存在沒有限制。

class Class1 implements Interface1, Interface2, Interface3, Interface4, Interface5, Interface6{ 
    ..... 
} 

這意味着這是對 希望這有助於你

3

是的,兩個以上的接口可以通過一個單獨的類來實現。
PHP manual:如果需要,通過分離 用逗號分隔每個接口

類可以實現多於一個接口。