2013-09-16 12 views
6

Piszę poniżej w jednym pliku php.PHP nie może rozszerzyć się z interfejsu?

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

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

Ludzie to interfejs, inżynier rozszerza ludzi. Ale kiedy uruchomić ten kod, błąd:

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

Co się stało? Moja wersja PHP to 5.4.

+7

Klasy implementują interfejsy, nie przedłużają ich. –

+0

PHP używa metodologii jako Javy, aby zapobiec problemowi z diamentem - Zobacz http://pl.wikipedia.org/wiki/Multiple_inheritance - stąd słowo kluczowe implements –

+0

Dziękuję wam wszystkim. Foolish mnie. –

Odpowiedz

29

zaimplementować interfejsy i przedłużyć klas:

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

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

Człowieku, w niektóre dni czuję się * głupio *. Z jakiegoś powodu ten błąd PHP nie sprawia, że ​​myślę "oh, napisałem * extends * not * implements *". – bishop

18

extends jest rozszerzenie innej klasy.

W przypadku interfejsów należy zamiast tego użyć implements.

(interfejs może extend inny interfejs, choć)

+9

+1 dla 'Interfejs może rozszerzyć inny interfejs, jednak' – Patrick

+0

Ale sygnatura metody m1 (AInterface $ obj) w klasie A może być nadpisana przez m1 (BInterface $ obj) nawet – vicaba

+0

_ "Interfejsy mogą być rozszerzone jak klasy przy użyciu rozszerza operatora. "_ [php.net - interfejsy] (http://php.net/manual/en/language.oop5.interfaces.php) – Santi

1

Zależy od tego, co chcesz, może to być:

  • klasa rozszerza aClass
  • klasa implementuje anInterface
  • interfejs rozciąga anInterface

Można rozszerzyć tylko jedną klasę/interfejs ace i wdrożyć wiele interfejsów. Możesz rozszerzyć interfejs na inny interfejs, np. interfejs Interfejs DieselEngineInterface rozszerza interfejs EngineInterface.

Należy również odnotować komentarz, ponieważ teraz możesz mieć hierarchię klasy i interfejsu, musisz wiedzieć, kiedy z nich korzystać.

-1

Używam: interface xyz{…}. Następnie class abc implements xyz uzyskać:

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

OK! tak extendabc z xyz uzyskać:

Class abc cannot extend from interface xyz

uruchomiony w Eclipse "Oxygen" PHP 7 dobrą pracę!

Powiązane problemy