2013-09-16 75 views
6

我在下面寫在一個單一的PHP文件。PHP無法從界面擴展?

<?php 
interface people 
{ 
    public function take($s); 
} 

class engineer extends people 
{ 
    public function take($s){ 
     echo $s; 
    } 
} 
?> 

人是界面,工程師延伸人。 但是當我運行此代碼時,錯誤:

Fatal error: Class engineer cannot extend from interface people in E:\php5\Mywwwroot\b.php on line 12 

發生了什麼事?我的PHP版本是5.4。

+7

類實現接口,不擴展它們。 –

+0

PHP使用Java方法來防止鑽石問題 - 請參閱http://en.wikipedia.org/wiki/Multiple_inheritance - 因此implements關鍵字 –

+0

謝謝大家。愚蠢的我。 –

回答

29

實現接口和擴展

<?php 
interface people 
{ 
    public function take($s); 
} 

class engineer implements people 
{ 
    public function take($s){ 
     echo $s; 
    } 
} 
?> 
+3

男人,有些日子我覺得*啞*。出於某種原因,這個PHP錯誤並沒有讓我想到「哦,我寫了* extends * not * implements *」。 – bishop

18

extends是用於擴展另一個類。

對於接口,您需要改爲使用implements

(一個接口可以extend另一個接口,雖然)

+9

+1對一個接口可以擴展另一個接口,雖然' – Patrick

+0

但是類A中的方法簽名m1(AInterface $ obj)不能被m1覆蓋(BInterface $ obj),即使 – vicaba

+0

_「接口可以像使用擴展運營商。「_ [php.net - interfaces](http://php.net/manual/en/language.oop5.interfaces.php) – Santi

1

取決於你想要什麼,它可能是:

  • 類擴展ACLASS
  • 類實現anInterface
  • 接口擴展anInterface

您只能擴展一個類/接口王牌和實現許多接口。您可以將界面擴展到另一個界面,例如DieselEngineInterface接口擴展EngineInterface。

也想記下一條評論,現在您可以擁有類和接口層次結構,您需要知道何時使用它們。

-1

我用:interface xyz{…}。 然後class abc implements xyz我得到:

The type xyz cannot be a superinterface of abc; a superinterface must be an interface

OK! 所以extendabcxyz我得到:

Class abc cannot extend from interface xyz

在Eclipse中運行 「氧」 PHP 7 GOOD JOB!