⊗ppOpIfSII 73 of 107 menu

PHPのOOPにおける複数のインターフェース

PHPには多重継承はありません - 各クラスは一つの親クラスしか持つことができません。 しかし、インターフェースについては事情が異なります: 各クラスは任意の数のインターフェースを実装できます。 そのためには、インターフェース名をキーワード implements の後にカンマで区切って列挙します。

これは、インターフェースと抽象クラスのもう一つの違いを示しています - 多くのインターフェースを実装することはできますが、複数の抽象クラスを継承することはできません。

実際に試してみましょう。インターフェース iFigure の他に、インターフェース iTetragon があるとします。 このインターフェースのメソッドは、 Quadrate クラスと Rectangle クラスによって実装されます(これらのクラスには 4 つの辺があります)が、 Disk クラスでは実装されません。

インターフェース iTetragon は、四角形のすべての4辺に対するゲッターを記述するとします:

<?php interface iTetragon { public function getA(); public function getB(); public function getC(); public function getD(); } ?>

また、以前に作成したインターフェース iFigure があるとします:

<?php interface iFigure { public function getSquare(); public function getPerimeter(); } ?>

Quadrate クラスが2つのインターフェースを実装するようにしましょう。 そのためには、キーワード implements の後に両方のインターフェースをカンマで区切って列挙します:

<?php class Quadrate implements iFigure, iTetragon { // ここに実装が入ります } ?>

次に、 Quadrate クラスを改良して、インターフェース iTetragon を実装するようにしましょう。 この正方形は四角形の特殊なケースであることは明らかです。なぜなら、正方形のすべての辺は等しいからです。 したがって、すべての新しいメソッドは同じもの - 正方形の幅 - を返します:

<?php class Quadrate implements iFigure, iTetragon { private $a; public function __construct($a) { $this->a = $a; } public function getA() { return $this->a; } public function getB() { return $this->a; } public function getC() { return $this->a; } public function getD() { return $this->a; } public function getSquare() { return $this->a * $this->a; } public function getPerimeter() { return 4 * $this->a; } } ?>

明らかに、長方形ではすべての辺が同じではなく、対辺だけが同じです。 この場合、新しいメソッドは少し異なるものになります。 そして、例えば台形では、すべての 4 辺が異なることになるでしょう。

しかし、どの図形を考えるかは重要ではありません - 重要なのは、これらすべての図形が記述されたメソッド(たとえ一部の図形が特殊なものであっても)を持ち、同じように動作するということです。

Rectangle クラスも2つのインターフェースを実装するようにしてください: iFigureiTetragon の両方です。

メソッド getRadiusgetDiameter を持つインターフェース iCircle を作成してください。

Disk クラスも2つのインターフェースを実装するようにしてください: iFigureiCircle の両方です。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否