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 *
Versuchen Sie es anders herum:
class database extends mysqli implements databaseInterface { ...}
Das sollte funktionieren.
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.
ja, wenn Sie mehrere Schnittstellen implementieren möchten, können Sie dies folgendermaßen tun:
public class MyClass extends BaseClass implements myInterface1, myInterface2, myInterface3{
}