web-dev-qa-db-fra.com

Une classe peut-elle étendre une classe et implémenter une interface

Une classe peut-elle étendre à la fois une interface et une autre classe en PHP?
Fondamentalement, 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, simplement en faisant:

class database implements databaseInterface extends mysqli{ 

entraîne une erreur fatale:

 Erreur d'analyse: erreur de syntaxe, T_EXTENDS inattendu, attente de '{' dans * fichier * en ligne * ligne * 
89
Pim Jager

Essayez l'inverse:

class database extends mysqli implements databaseInterface { ...}

Cela devrait fonctionner.

157
Simon Lehmann

Oui il peut. Il vous suffit de conserver la bonne commande.

class database extends mysqli implements databaseInterface { ... }

De plus, une classe peut implémenter plusieurs interfaces. Séparez-les simplement par des virgules.

Cependant, je me sens obligé de vous avertir que étendre 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 à db de la manière mysqli (ou de la manière PDO).

De plus, une chose mineure, mais les conventions de dénomination sont importantes. Votre classe database semble plus générale que mysqli, donc elle suggère que cette dernière hérite de database et non l'inverse.

17
Michał Rudnicki

oui, en fait, si vous voulez implémenter plusieurs interfaces, vous pouvez faire comme ceci:

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

}
3
nullpointer