2013-09-16 11 views
6

Scrivo qui di seguito in un singolo file php.PHP non può estendersi dall'interfaccia?

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

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

La gente è un'interfaccia, l'ingegnere estende le persone. Ma quando si esegue questo codice, l'errore:

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

Che cosa è successo? La mia versione di PHP è 5.4.

+7

Le classi implementano le interfacce, non le estendono. –

+0

PHP usa la metodologia come Java per prevenire il problema dei diamanti - Vedi http://en.wikipedia.org/wiki/Multiple_inheritance - da qui la parola chiave implements –

+0

Grazie a tutti voi. Mi sciocca. –

risposta

29

È attuare interfacce e estendono classi:

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

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

Uomo, alcuni giorni mi sento * stupido *. Per qualche ragione, l'errore di PHP non mi fa pensare "oh, ho scritto * estende * non * implementa *". – bishop

18

extends è per estendere un'altra classe.

Per le interfacce, è necessario utilizzare implements.

(Un'interfaccia può extend un'altra interfaccia, però)

+9

+1 per 'Un'interfaccia può estendere un'altra interfaccia, sebbene' – Patrick

+0

Ma una firma di metodo m1 (AInterface $ obj) nella classe A non può essere sovrascritta da m1 (BInterface $ obj) anche – vicaba

+0

_" Le interfacce possono essere estese come le classi utilizzando il estende l'operatore. "_ [php.net - interfacce] (http://php.net/manual/en/language.oop5.interfaces.php) – Santi

1

dipende da ciò che si vuole, potrebbe essere:

  • classe estende Aclass
  • classe implementa anInterface
  • interfaccia
  • estende anInterface

È possibile estendere solo una classe/interf asso e implementa molte interfacce. Puoi estendere l'interfaccia a un'altra interfaccia, ad es. interfaccia DieselEngineInterface estende EngineInterface.

Inoltre, si desidera prendere nota di un commento, ora che è possibile avere una gerarchia di classe e di interfaccia, è necessario sapere quando utilizzarli.

-1

Io uso: interface xyz{…}. Poi class abc implements xyz ottengo:

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

OK! così extendabc da xyz ottengo:

Class abc cannot extend from interface xyz

esecuzione in eclipse "ossigeno" php 7 BUON LAVORO!

Problemi correlati