Interface PHP: Spécifier la visibilité pour la
Je suis en train de faire une interface pour un ensemble de classes. J'ai un problème, toutefois, parce que je souhaite pour tout visibilité
pour être admis dans l'interface (Qui est: public
, protected
et private
).
J'ai besoin de la méthode parent d'être protégé et j'ai besoin de l'enfant de la méthode pour être privé, mais j'obtiens un message d'erreur indiquant que
Erreur fatale: le type d'Accès pour la méthode de l'interface Baz::qux() doit être omis dans <le fichier avec Baz/Barre>."
J'ai essayé d'indiquer d'autres méthodes de publicité dans la section Baz
et la suppression de public
, mais ils ont tous échoué.
Est-il un moyen que je peux le faire via l'interface? Si non, alors est il possible que je peux déclarer abstract
, j'ai essayé, mais a échoué.
interface Baz
{
public function qux();
}
class Bar implements Baz
{
protected function qux()
{
//do foo
}
}
class Foo extends Bar implements Baz
{
private function qux()
{
parent::qux();
}
}
- Chaque fois que vous semblez besoin d'une telle chose, c'est généralement une bonne indication que quelque chose est incorrect avec votre concept.
- Une interface est juste un fil de fer alors pourquoi vous vous souciez de la visibilité en elle
- Mes excuses, maintenant je le sais. Merci pour l'info de tous.
- PHP soulève même message d'erreur lorsque vous spécifiez la méthode que
abstract
. Par exemple:abstract public function qux();
Vous devez vous connecter pour publier un commentaire.
Méthodes que vous déclarez dans Interfaces devrait être public. Vous définissez un contrat avec une interface. Tout non-public méthodes de mise en œuvre de détails et de ceux qui n'appartiennent pas à une Interface.
De Wikipedia:
__call()
méthode qui appelle protégé méthode avec le même nom de propriété avec le préfixe. L'accès à$object->name
appels protégé$object->getName()
. Dans ce cas, l'interface de privés ou protégés méthode peut avoir un certain sens? Je ne suis pas sûr.Une interface est un contrat entre 2 parties, un accord de la façon dont ils communiquent.
Il n'a pas de sens de faire des méthodes protected ou private, parce que l'autre partie ne verrez pas ceux.
Les devs désactivé la visibilité pour plus de liquide reusage. Par le mot-clé
implements
vous déjà lier une interface d'une classe. Vous ne pouvez pas accéder à une interface sans avoir mis en œuvre, de toute façon.