92 votes

Peut une classe d'étendre à la fois classe et de mettre en œuvre une Interface

Peut une classe d'étendre à la fois d'une interface et d'une autre classe en PHP?
Fondamentalement, je veux faire:

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

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

Comment pourrait-on faire cela, il suffit de faire:

class database implements databaseInterface extends mysqli{

résultats dans une erreur fatale:

Parse error: syntax error, unexpected T_EXTENDS, expecting '{' in *fichier* en ligne *ligne*

161voto

Simon Lehmann Points 5442

Essayez dans l'autre sens:

class database extends mysqli implements databaseInterface { ...}

Cela devrait fonctionner.

18voto

Michał Rudnicki Points 8424

Oui, il peut. Vous avez juste besoin de conserver le bon ordre.

class database extends mysqli implements databaseInterface { ... }

En outre, une classe peut implémenter plusieurs interfaces. Juste séparer 'em avec des virgules.

Cependant, je me sens obligé de vous avertir que l'extension de la classe mysqli est incroyablement mauvaise idée. L'héritage de soi est probablement le plus surfait et abusé de la notion en programmation orientée objet.

Au lieu de cela je vous conseille de faire db-trucs en relation avec le mysqli ou PDO façon).

De Plus, une chose mineure, mais les conventions de nommage de la matière. Votre classe database semble plus général alors mysqli, par conséquent, il suggère que ce dernier hérite d' database , et non l'inverse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X