110

クラスは、PHPのインターフェイスと別のクラスの両方を拡張できますか?
基本的に私はこれをしたい:

interface databaseInterface{
 public function query($q);
 public function escape($s);
 //more methods
}

class database{ //extends both mysqli and implements databaseInterface
 //etc.
}

これをどのように行うか、単純に次のようにします。

class database implements databaseInterface extends mysqli{ 

致命的なエラーが発生します:

解析エラー:構文エラー、予期しないT_EXTENDS、行*行*の*ファイル*に'{'が必要です
4

3 に答える 3

193

逆に試してください:

class database extends mysqli implements databaseInterface { ...}

これは機能するはずです。

于 2009-03-16T21:11:26.477 に答える
25

はい、できます。正しい順序を保持する必要があります。

class database extends mysqli implements databaseInterface { ... }

さらに、クラスは複数のインターフェースを実装できます。'emをコンマで区切ってください。

ただし、 mysqliクラスを拡張することは非常に悪い考えであることを警告する義務があると感じています。継承自体は、おそらくオブジェクト指向プログラミングで最も過大評価され、誤用されている概念です。

代わりに、データベース関連のものをmysqliの方法(またはPDOの方法)で実行することをお勧めします。

さらに、些細なことですが、命名規則は重要です。あなたのクラスdatabaseはそれよりも一般的であるように思われるmysqliので、後者はその方法ではなく、継承していることを示唆していdatabaseます。

于 2009-03-16T21:14:56.200 に答える
10

はい、実際、複数のインターフェースを実装したい場合は、次のようにすることができます:

public class MyClass extends BaseClass implements myInterface1, myInterface2, myInterface3{ 

}
于 2015-09-12T13:53:41.193 に答える