Heim > Artikel > Backend-Entwicklung > Was ist der Unterschied zwischen Klassenvererbung und Schnittstellenvererbung in PHP?
In PHP besteht der Unterschied zwischen Klassenvererbung und Schnittstellenvererbung darin, dass PHP-Klassen keine Mehrfachvererbung unterstützen, dh Unterklassen können nur eine übergeordnete Klasse erben, unterstützen jedoch mehrstufige Vererbung, während Schnittstellen Mehrfachvererbung unterstützen, d. Schnittstellen können vererbt werden. Eine oder mehrere Schnittstellen.
Die Betriebsumgebung dieses Artikels: Windows 10-System, PHP-Version 7.1, Dell G3-Computer.
PHP-Klassenvererbung:
1 PHP-Klassen unterstützen keine Mehrfachvererbung, das heißt, Unterklassen können nur eine übergeordnete Klasse erben, unterstützen jedoch die Vererbung auf mehreren Ebenen
Zum Beispiel:
class frist{ public function __construct(){ echo "我是第一个类。","<br>"; } public function printer(){ echo "frist","<br>"; } } class seconds extends frist{} class third extends seconds{} $obj = new third(); $obj->printer();
Ergebnis: Dies ist die erste Klasse. Die zweite und dritte Klasse von frist überschreiben die Methode „printer()“ nicht. Die Methode „printer()“ kann aufgerufen werden, nachdem die dritte Klasse instanziiert wurde.
2. Probleme mit der Vererbungsberechtigung
(1) Die private Methode der übergeordneten Klasse kann nicht vererbt werden und die übergeordnete Klasse ist privatisiert. (2) Die geschützte Methode der übergeordneten Klasse kann vererbt, aber nicht aufgerufen werden Das instanziierte Objekt. Wenn der Fehler „Call to protected method frist::printer()“ auftritt, versetzt die übergeordnete Klasse diese Methode in den geschützten Modus.
(3) Die öffentliche Methode der übergeordneten Klasse kann von der instanziierten Klasse geerbt und aufgerufen werden Objekt, und es ist eine öffentliche Methode
( 4) Unterklassen können die öffentlichen oder geschützten Methoden der übergeordneten Klasse überschreiben, aber keine erneut privaten Methoden. Wenn sie denselben Namen haben, können sie nur in dieser Klasse neu deklariert werden
3. Vererbung der Schnittstellenklasse
(1) Die Schnittstelle unterstützt Mehrfachvererbung und die Methoden der Schnittstellenklasse müssen nicht implementiert werden, z. B.:
interface frist{ public function ex1(); } interface seconds{ public function ex2(); } interface third extends frist,seconds{ public function ex3(); } class fourth implements third{ public function ex1(){} public function ex2(){} public function ex3(){} } class fourth implements frist,seconds{ public function ex1(){} public function ex2(){} }
(2) Die Methodenberechtigungen der Schnittstellenklasse sind öffentlich. und der Standardwert ist public
(3) Die Klasse, die auf die Schnittstelle verweist, muss alle Methoden der Schnittstelle implementieren, andernfalls wird ein Fehler gemeldet, z. B.: „Klasse e enthält 1 abstrakte Methode und muss daher als abstrakt deklariert oder implementiert werden.“ die verbleibenden Methoden“, das heißt: Klasse e enthält 1 abstrakte Methode, daher müssen die verbleibenden Methoden als abstrakt deklariert oder implementiert werden.
4. Abstrakte Klasse: Solange eine Methode in einer Klasse eine abstrakte Methode ist, muss diese Klasse als abstrakte Klasse definiert werden. (1) Abstrakte Klassen können die Methoden der übergeordneten Klasse nicht überschreiben.
(2) Die Vererbung abstrakter Klassen ist eine Erweiterung der Methoden der übergeordneten Klasse.
(3) Alle abstrakten Methoden in geerbten abgeleiteten Klassen müssen überladen werden, bevor sie instanziiert werden können.
(4) Die durch abstrakte Klassen implementierte gewöhnliche Verteilung kann direkt in nicht-abstrakten Unterklassen aufgerufen werden.
5. Ähnlichkeiten und Unterschiede zwischen Schnittstellen und abstrakten Klassen (bezogen auf den Unterschied zwischen abstrakten Klassen und Schnittstellen)
(1) Die Verwendung von Schnittstellen wird durch das Schlüsselwort „implementiert“ erreicht, und der Schlüssel zur Verwendung der Klassenvererbung liegt in der abstrakten Operation Klassen
(2) implementiert durch Word exotends Die Schnittstelle hat keine Datenmitglieder, aber die abstrakte Klasse hat Datenmitglieder, und die abstrakte Klasse kann die Datenkapselung implementieren.
(3) Die Schnittstelle hat keinen Konstruktor, aber die abstrakte Klasse kann einen Konstruktor haben.
(4) Die Methoden in der Schnittstelle sind alle öffentliche Typen, während die Methoden in der abstrakten Klasse durch private, geschützte oder öffentliche Methoden geändert werden können.
(5) Eine Klasse kann mehrere Schnittstellen gleichzeitig implementieren, aber nur eine abstrakte Klasse.
(6) Ähnlichkeit: In den Funktionskörper kann nichts geschrieben werden, wie zum Beispiel: function getName();.
Empfohlenes Lernen: „
PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Klassenvererbung und Schnittstellenvererbung in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!