[PHP5] probleme interface

probleme interface [PHP5] - PHP - Programmation

Marsh Posté le 05-12-2006 à 00:43:23    

Bonsoir :)
Travaillant sur un projet d'assez grande ampleur et comportant de tres nombreux objet , je dois si je veux maintenir une qualité de code correcte implémenter des interfaces a chacun de mes objets.
 
Voici ci-dessous une interface que j'ai créé :

Code :
  1. interface admin_content {
  2. private function _Header();
  3. private function _Footer();
  4. public function getHtml();
  5. public function setParent(&$AdminObject);
  6. }


le probleme , c'est que quand je l'implémente j'obtiens l'erreur suivante :

Code :
  1. Fatal error: Access type for interface method admin_content::_Header() must be omitted in /var/www/www/V2/php5_libs/config.inc.php on line 47


 
Je ne comprends pas vraiment cette erreur... Une idée ?
 
Nb : je suis en PHP 5.2

Reply

Marsh Posté le 05-12-2006 à 00:43:23   

Reply

Marsh Posté le 05-12-2006 à 02:15:03    

C'est juste que toutes les méthodes d'une interface doivent être déclarées public :)

Reply

Marsh Posté le 05-12-2006 à 08:21:20    

C'est très embettant ca !!!!

Reply

Marsh Posté le 05-12-2006 à 10:34:03    

En même temps, faut pas vouloir interfacer tout et n'importe quoi :/

Reply

Marsh Posté le 05-12-2006 à 10:36:41    

the_bigboo a écrit :

C'est très embettant ca !!!!


Bah non, c'est logique, à quoi ça sert de définir une méthode privée dans une interface ? La classe qui l'implémente ne sera pas obligée de l'utiliser [:petrus dei]
 
Genre ta fonction privée _Header() (d'ailleurs vire l'underscore, c'est moche :D), si une classe l'implémente, qu'est-ce qui oblige la classe à l'utiliser ? Peut-être d'ailleurs qu'elle ne sera même pas pratique au final...

Reply

Marsh Posté le 05-12-2006 à 11:29:38    

Tu peux la rendre protected au lieu de private et ca devrait marcher !
 
Pour info :  
 
Private rend privé ta fonction pour la classe uniquement
 
Protected rend privé ta fonction pour la classe et ses classes héritières!
 
Et public rend la fonction public pour tout le monde!

Reply

Marsh Posté le 05-12-2006 à 12:53:05    

lebayou a écrit :

Tu peux la rendre protected au lieu de private et ca devrait marcher !


Non car ce n'est pas dans le cadre d'une extension de classe ;)
Interfacer pour tout et n'importe quoi , surement pas, C'esy juste que ca permet je trouve d'avoir un code homogene et dans la mesure que tous les objets que je créé sont en quelques sorte des modules il est plus intéressants qu'ils soient dévelloppés dans un modele commun et ce que ca soit en méthodes publique ou privées...

Reply

Marsh Posté le 05-12-2006 à 12:56:53    

Si la méthode est privée, elle ne servira qu'à la classe. Et donc est parfaitement inutile dans une interface qui est censé représenté la structure publique d'une classe. Comme dit, vu qu'il n'y a évidemment aucune implémentation dans l'interface (au contraire d'une classe abstraite), ça sert à rien des trucs privés.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed