Bonjour à tous.
Considérons l'exemple suivant:
Inutile de préciser que ça ne fonctionne pas en PHP, la redéfinition n'étant pas possible. J'ai cependant ce besoin, il faut que ma classe concrête MySQLModel implémente l'interface Model mais elle doit recevoir un paramètre supplémentaire sur son constructeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 interface Model { public function __construct ($id = null); } abstract class BaseModel implements Model { public function __construct ($id = null) { var_dump($id); } } class MySQLModel extends BaseModel { public function __construct ($id = null) { throw new RuntimeException('Missing $tbl parameter'); } public function __construct ($tbl, $id = null) { var_dump($tbl,$id); } }
Dès lors comment s'en sortir ? J'ai pensé à:
- utiliser func_get_args
- ajouter un argument arbitraire supplémentaire sur le prototype du constructeur dans l'interface (de type array) (que c'est moche)
- enlever tous les paramètres du constructeur dans l'interface et laisser les classes filles se débrouiller avec func_get_args (ce qui rends l'interface 'achement utile !)
- dégager l'interface
- vous demander votre avis
Partager