Kann eine Klasse sowohl eine Schnittstelle als auch eine andere Klasse in PHP erweitern?
Grundsätzlich möchte ich das machen:
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 machen:
class database implements databaseInterface extends mysqli{
führt zu einem schwerwiegenden Fehler:
Analysefehler: Syntaxfehler, unerwartetes T_EXTENDS, Erwartung '{' in * Datei * in Zeile * Zeile *
php
php-parse-error
Pim Jäger
quelle
quelle
Antworten:
Versuchen Sie es anders herum:
Das sollte funktionieren.
quelle
Ja, kann es. Sie müssen nur die richtige Reihenfolge beibehalten.
Darüber hinaus kann eine Klasse mehr als eine Schnittstelle implementieren. Trenne sie einfach durch Kommas.
Ich fühle mich jedoch verpflichtet, Sie zu warnen, dass die Erweiterung der MySQL-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 Dinge auf mysqli-Weise (oder PDO-Weise) zu tun.
Plus, eine Kleinigkeit, aber Namenskonventionen sind wichtig. Ihre Klasse
database
scheint dann allgemeiner zu seinmysqli
, daher deutet dies darauf hin, dass letztere vondatabase
und nicht von der Art und Weise erbt .quelle
Ja, wenn Sie mehrere Schnittstellen implementieren möchten, können Sie Folgendes tun:
quelle