De alguna breve tocar el violín alrededor, encuentro que consigo un error al redefinir los métodos de superclase en una subclase cuando lo haga lo siguiente:¿Por qué PHP permite que los métodos protegidos y privados se hagan públicos mediante una anulación en subclases?
- Anular un método de una clase protegida con un método de subclase privada
- Anular una superclase pública método con un método de subclase protegida o privada
sin embargo, si lo hago en la otra dirección, se lanza ningún error:
- Anulación de un método de una clase privada con un método protegido o subclase pública
- Anulación de un método de una clase protegida con un método de subclase pública
Esto parece contra intuitivo para mí - me esperaba que trabajar al revés en orden para hacer cumplir la ocultación y el encapsulamiento de la información. Esto parece permitir un diseño deficiente al permitir que las partes internas se expongan de una manera que puede romper otros métodos y no puedo ver un caso cuando sería una buena idea. ¿Por qué se ha implementado de esta manera y qué me he perdido?
Además, ¿es esta práctica estándar en otros lenguajes de programación?
¿Y por qué no debería? – YuS
Quiero decir que para evitar que las dependencias se desarrollen entre componentes, es bueno apegarse a la cantidad mínima de métodos públicos expuestos. Permitir que los métodos privados se hagan públicos anima a otros desarrolladores a hacer uso de ellos y, por lo tanto, socava la capacidad de cambiar las clases utilizando polimorfismo. –
Corrígeme si me equivoco: el lenguaje de programación debe ser una herramienta y debe ser lo más flexible posible; el diseño del código, los patrones y los comportamientos están en la conciencia del desarrollador. Ahora, si imaginamos que no está hablando de vulnerabilidades externas, ¿realmente está hablando de programadores de un equipo que sabotean el desarrollo? – YuS