78 votes

Est-il possible d'avoir une interface qui a des méthodes privées / protégées?

Est-il possible en PHP 5 d'avoir une interface qui a des méthodes privées / protégées?

En ce moment j'ai:

 interface iService
{
    private method1();
}
 

Cela jette une erreur:

Erreur d'analyse: erreur de syntaxe, T_STRING inattendu, attente de T_VARIABLE

Je veux juste avoir la confirmation qu'il est le cas qu'une interface ne peut contenir que des méthodes publiques.

135voto

Pascal MARTIN Points 195780

La page de manuel PHP sur les interfaces dit explicitement:

Toutes les méthodes déclarées dans une interface doivent être publiques, c'est la nature d'une interface.

Je suppose que cela explique l'erreur que vous obtenez ;-)

20voto

ryanday Points 1367

Les interfaces sont utilisées pour décrire les méthodes publiques d'une classe implémentant cette interface. Vous ne pouvez jamais avoir une méthode privée dans une interface. Toutes les méthodes d'une interface sont supposées être utilisées et ne doivent pas être modifiées.

Interfaces est le lien PHP, mais ceci est standard dans la programmation OO.

10voto

Webleeuw Points 3879

En général, une interface ne peut avoir le public et les membres, parce que la seule fonction d'une interface est héréditaire.

À partir de PHPfreaks.com tutoriel:

PHP5 caractéristiques des interfaces. De ne pas être confondre avec les interfaces dans le plus sens général, le mot-clé interface crée une entité qui peut être utilisé pour appliquer une interface commune à des classes sans avoir à les étendre comme avec les classes abstraites. Au lieu d'un l'interface est mise en œuvre.

Les Interfaces sont différentes de l'abstrait des classes. Pour un, ils n'en sont pas vraiment des classes. Ils ne définissent pas les propriétés, et ils ne définissent pas de tout comportement. Les méthodes déclarées dans une interface doit être déclarée dans les classes qui la mettre en œuvre.

Car une interface dans le plus le sentiment général est une définition de la façon dont un objet interagit avec un autre code, toutes les méthodes doivent être déclarées public (voir la section sur la visibilité dans ce chapitre). À l'aide de classes abstraites, un la méthode abstraite ne peut avoir aucune visibilité, mais l'extension de classes doivent avoir de leur mise en œuvre utilisation les mêmes (ou plus faible) de la visibilité. La mise en œuvre d'une interface ajoute l' des méthodes comme les méthodes abstraites de la l'objet de la classe, de l'échec à mettre en œuvre entraînera une erreur comme l' suivantes:

Fatale erreur: Classe SomeConcreteClass contient n méthode abstraite(s) et doit donc être déclarée abstract ou mettre en œuvre les autres methodsYes, les classes abstraites peuvent mettre en œuvre les interfaces.

6voto

just somebody Points 9534

les interfaces sont les déclarations de type. un type est un ensemble de valeurs, ainsi qu'un ensemble d'opérations qui peuvent être exercées sur eux de l'extérieur. une méthode privée ne rentre pas dans cette image.

interface T {
  public /*int*/ function f(array $a);
}
interface U {
  public /*T*/ function g(T $t);
}

class C implements U {
    public function g(T $t) {
        ...
        $x = $t->f();
        ...
    }
}

les interfaces sont utiles parce qu'ils de l'état, bien, objets interfaces. comment les objets de communiquer avec leur environnement.

maintenant, disons T::f pourrait être déclarée en privé. comment pourrait-il être utile à d'autres objets? il ne serait pas appelée à partir de l'extérieur, elle ne ferait pas partie de son interface.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X