Visibilité d'une méthode après un héritage - PHP - Programmation
Marsh Posté le 04-06-2008 à 14:47:37
Bah non c'est comme ça (et ça me paraît logique), dans la classe de base ce que tu définis c'est la visibilité minimum. T'as le droit de l'étendre dans les sous-classes si ça te chante, mais pas de la restreindre.
Marsh Posté le 04-06-2008 à 18:46:22
Ben là en l'occurence il redéfinit f, donc moi ca me parait étrange qu'il ne puisse pas la mettre en private si ca lui chante, non ?
En même temps je dis ca, je n'ai jamais eut besoin de faire ce genre de manipulation alors le véritable problème est peut-être à chercher au niveau de la conception...
Marsh Posté le 04-06-2008 à 18:54:12
Un objet d'une sous-classe B est censé pouvoir remplacer un objet de la classe parent A partout ou un objet de cette classe est attendu. Donc si quelqu'un veut utiliser une fonction publique A::f il ne faut pas qu'un B::f la fasse "disparaitre".
Inversement si B fait "apparaitre" une fonction protected de A, cela ne gène en rien les utilisateurs de la classe A, si A a laissé la fonction en protected au lieu de private, il autorise ses sous-classes à en faire ce qu'elles veulent, y compris l'exposer au monde entier.
Marsh Posté le 04-06-2008 à 14:37:24
Salut !
Y'a quelqu'un pour m'expliquer pourquoi on peut augmenter (mettre en public) la visibilité de f() alors que dans mon esprit c'était le contraire ?
Si je veux mettre B::f() en privé ça me jette : « Fatal error: Access level to B::f() must be protected (as in class A) or weaker in /home/xxx/hfr.php on line 13 ».
(PHP 5.2.5-3+lenny1 with Suhosin-Patch 0.9.6.2 (cli))