Existe-t-il une possibilité de réduire le niveau d'accès d'une fonction dans une classe dérivée en PHP?réduire le niveau d'accès d'une fonction dans une classe dérivée
exemple (... signifie plus de code)
class foo
{
public function myFunction() { ... }
public function myOtherFunction() { ... }
}
class bar extends foo
{
private function myFunction() { ... }
}
Maintenant, je should'nt pouvoir appeler MyFunc
ion un objet bar
. Mais le faire de cette façon ne semble pas être valide en PHP. Un autre moyen? Je sais que je pourrais implémenter une fonction vide mais je ne veux pas du tout exposer la fonction dans l'interface.
La pensée était que j'ai une classe abstraite qui a une fonction appelée registerObject() et puis j'ai une classe qui l'étend et qui a une fonction appelée registerForm() qui appelait simplement parent :: registerObject() mais serait un nom plus approprié pour l'objet en question. Mais vous avez raison, c'est une mauvaise pratique quand j'y pense:) ... Je devrais probablement faire une fonction protégée registerObject() et avoir ensuite la fonction publique registerForm() dans la classe dérivée et ainsi de suite. – inquam
Nous avons une classe OurException extends Exception. Nous avons 2 façons de créer une instance de OurException. En raison de l'incapacité innée des PHPs à surcharger __construct d'une manière élégante, nous aimerions créer 2 méthodes statiques, ie. OurException :: newA et OurException :: newB (d'après mes recherches, cela semble être une manière assez standard de contourner la surcharge). Mais nous ne voulons pas que les gens utilisent "new OurException", donc nous aimerions rendre __construct protected ou private. Ce n'est pas possible car Exception __construct est public. – Pancho
... suite. Malheureusement, cela n'a aucun sens dans notre contexte de lancer une exception "non supporté" lorsqu'une exception est en cours de lancement. Si PHP pouvait surcharger de manière fiable un constructeur, il serait plus logique d'adhérer à la «promesse» de la POO que vous avez mentionnée ci-dessus. Cependant, sans surcharger propre, l'incapacité de "réduire l'accessibilité à __construct" est dans notre contexte très problématique ... et je ne sais vraiment pas comment contourner le problème :( – Pancho