Une classe peut-elle étendre à la fois une interface et une autre classe en PHP?
En gros, je veux faire ceci:
interface databaseInterface{
public function query($q);
public function escape($s);
//more methods
}
class database{ //extends both mysqli and implements databaseInterface
//etc.
}
Comment ferait-on cela, en faisant simplement:
class database implements databaseInterface extends mysqli{
entraîne une erreur fatale:
Erreur d'analyse: erreur de syntaxe, T_EXTENDS inattendu, attente de '{' dans * fichier * sur la ligne * ligne *
php
php-parse-error
Pim Jager
la source
la source
Réponses:
Essayez-le dans l'autre sens:
Cela devrait fonctionner.
la source
Oui il peut. Il vous suffit de conserver le bon ordre.
De plus, une classe peut implémenter plus d'une interface. Séparez-les simplement par des virgules.
Cependant, je me sens obligé de vous avertir que l' extension de la classe mysqli est une très mauvaise idée . L'héritage en soi est probablement le concept le plus surfait et le plus mal utilisé dans la programmation orientée objet.
Au lieu de cela, je conseillerais de faire des choses liées à la base de données à la manière mysqli (ou PDO).
De plus, une chose mineure, mais les conventions de dénomination comptent. Votre classe
database
semble alors plus généralemysqli
, donc elle suggère que ce dernier hérite dedatabase
et non pas de la manière autour.la source
oui, en fait, si vous souhaitez implémenter plusieurs interfaces, vous pouvez faire comme ceci:
la source