Bonsoir,

Je rencontre un problème un peu particulier avec les interfaces en PHP5, ou plutôt une curiosité... :

Soit une interface quelquonc :

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);
}
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
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 : 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);
}
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 !