[POO] Interface et méthode abstraite en PHP5
Bonsoir,
Je rencontre un problème un peu particulier avec les interfaces en PHP5, ou plutôt une curiosité... :
Soit une interface quelquonc :
Code:
1 2 3 4 5 6 7 8
| // Extrait de code PHP5
interface iExemple
{
public function __construct($argv);
public function getVar($param);
} |
Et une classe qui l'implémente :
Code:
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)
{
// ...
}
} |
Le code qui ci-dessus ne produira aucune erreur.
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 :
Code:
1 2 3 4 5 6 7 8
| // Extrait de code PHP5
interface iExemple
{
abstract function __construct($argv);
public function getVar($param);
} |
Effectivement, là ça marche. PHP me retourne une erreur (le constructeur de la classe QuelqueChose étant différent).
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 !