Bonsoir,
Je rencontre un problème un peu particulier avec les interfaces en PHP5, ou plutôt une curiosité... :
Soit une interface quelquonc :
Et une classe qui l'implémente :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // Extrait de code PHP5 interface iExemple { public function __construct($argv); public function getVar($param); }
Le code qui ci-dessus ne produira aucune erreur.
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 class QuelqueChose implements iExemple { function __construct() { echo "Hello"; // ... } function getVar($param) { // ... } }
Pourtant, dans l'interface iExemple, le constructeur a été défini avec un paramère ($argv), tandis que dans la classe QuelqueChose, le constructeur a été redéfini sans ce paramètre.
Je comprends pas, le rôle de l'interface et de préciser la nature de la méthode, et de provoquer une erreur fatale si la sémantique n'est pas respectée... (Si j'avais omis le paramètre pour la méthode getVar, ça aurait été signalé).
Alors, j'ai pensé pouvoir forcer la chose en déclarant dans l'interface, le constructeur comme méthode abstraite :
Effectivement, là ça marche. PHP me retourne une erreur (le constructeur de la classe QuelqueChose étant différent).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // Extrait de code PHP5 interface iExemple { abstract function __construct($argv); public function getVar($param); }
Mais voilà, dans le manuel PHP, il est précisé qu'une classe implémentant une méthode abstraite doit elle-même être abstraite.
Et donc, cela veut dire "pas de méthode abstraite dans une interface, seulement dans une classe abstraite" ?
Ou alors ils définissent les classes abstraites comme étant toute classe qui ne peut s'instencier (précisément les classes abstraites et les interfaces)
Voilà, j'espere que vous avez compris la chose, c'est pas évident à expliquer...
Meric d'avance !
Partager