⊗ppOpIfSII 73 of 107 menu

Mehrere Schnittstellen in OOP in PHP

In PHP gibt es keine Mehrfachvererbung - jede Klasse kann nur einen Elternteil haben. Bei Schnittstellen verhält es sich jedoch anders: jede Klasse kann beliebig viele Schnittstellen implementieren. Dazu müssen die Namen der Schnittstellen nach dem Schlüsselwort implements aufgelistet werden, getrennt durch Kommas.

Hierin zeigt sich ein weiterer Unterschied zwischen Schnittstellen und abstrakten Klassen - man kann viele Schnittstellen implementieren, aber nicht mehrere abstrakte Klassen vererben.

Probieren wir es praktisch aus. Nehmen wir an, wir haben neben der Schnittstelle iFigure auch die Schnittstelle iTetragon. Die Methoden dieser Schnittstelle werden von den Klassen Quadrate und Rectangle implementiert, da sie 4 Seiten haben, aber nicht von der Klasse Disk.

Nehmen wir an, die Schnittstelle iTetragon beschreibt Getter für alle vier Seiten eines Vierecks:

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

Nehmen wir weiter an, wir haben die Schnittstelle iFigure, die wir bereits früher erstellt haben:

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

Sorgen wir dafür, dass die Klasse Quadrate zwei Schnittstellen implementiert. Dazu listen wir beide Schnittstellen nach dem Schlüsselwort implements auf, getrennt durch ein Komma:

<?php class Quadrate implements iFigure, iTetragon { // hier folgt die Implementierung } ?>

Erweitern wir nun unsere Klasse Quadrate so, dass sie die Schnittstelle iTetragon implementiert. Es ist klar, dass unser Quadrat ein degenerierter Fall eines Vierecks ist, da beim Quadrat alle Seiten gleich sind. Daher werden alle neuen Methoden dasselbe zurückgeben - die Breite des Quadrats:

<?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; } } ?>

Es ist offensichtlich, dass in einem Rechteck nicht alle Seiten gleich sind, sondern nur die gegenüberliegenden. In diesem Fall würden sich die neuen Methoden leicht unterscheiden. Und in einem Trapez wären überhaupt alle 4 Seiten unterschiedlich.

Es spielt jedoch keine Rolle, welche Figur wir betrachten - wichtig ist, dass all diese Figuren die beschriebenen Methoden haben werden (auch wenn einige Figuren degeneriert sind) und einheitlich funktionieren.

Sorgen Sie dafür, dass die Klasse Rectangle auch zwei Schnittstellen implementiert: sowohl iFigure als auch iTetragon.

Erstellen Sie die Schnittstelle iCircle mit den Methoden getRadius und getDiameter.

Sorgen Sie dafür, dass die Klasse Disk auch zwei Schnittstellen implementiert: sowohl iFigure als auch iCircle.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικά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
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen