2013-09-16 12 views
6

以下は1つの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エラーは私に "ああ、私は* * * *実装していない* *を書いた"と思うようにはなりません。 – 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
  • を拡張して実装して拡張します

1つのクラス/ interf多くのインターフェイスを実装します。インタフェースを別のインタフェースに拡張することができます。インターフェイス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

は日食 "酸素" PHPで7 GOOD JOBを実行しています!