wake-up-neo.com

Kann eine Klasse sowohl eine Klasse erweitern als auch ein Interface implementieren?

Kann eine Klasse sowohl eine Schnittstelle als auch eine andere Klasse in PHP erweitern?
Grundsätzlich möchte ich Folgendes tun:

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

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

Wie würde man das machen, einfach tun:

class database implements databaseInterface extends mysqli{ 

führt zu einem schwerwiegenden Fehler:

 Parse-Fehler: Syntaxfehler, unerwarteter T_EXTENDS, erwartet '{' in * file * on line * line * 
89
Pim Jager

Versuchen Sie es anders herum:

class database extends mysqli implements databaseInterface { ...}

Das sollte funktionieren.

157
Simon Lehmann

Ja, kann es. Sie müssen nur die richtige Reihenfolge beibehalten.

class database extends mysqli implements databaseInterface { ... }

Darüber hinaus kann eine Klasse mehr als eine Schnittstelle implementieren. Trennen Sie sie einfach mit Kommas.

Ich fühle mich jedoch verpflichtet, Sie zu warnen, dass die Erweiterung der mysqli-Klasse eine unglaublich schlechte Idee ist. Vererbung an sich ist wahrscheinlich das am meisten überbewertete und missbrauchte Konzept in der objektorientierten Programmierung.

Stattdessen würde ich empfehlen, db-bezogene Sachen auf mysqli-Weise (oder PDO-Weise) zu machen.

Eine Kleinigkeit, aber Namenskonventionen sind wichtig. Ihre Klasse database scheint allgemeiner zu sein als mysqli, daher legt sie nahe, dass letztere von database erbt und nicht umgekehrt.

17

ja, wenn Sie mehrere Schnittstellen implementieren möchten, können Sie dies folgendermaßen tun:

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

}
3
nullpointer