php - interfaces - metodos abstractos y finales
¿Cuándo implementar y extender? (1)
La herencia es útil para reducir la cantidad de código que reescribe. Si tiene varias clases con algunos métodos o campos comunes, en lugar de definir estos métodos y campos una y otra vez, puede factorizarlos en una clase base y hacer que cada una de las clases secundarias extienda esa clase base.
Las interfaces (y los implements
) son útiles cuando desea definir un protocolo común sobre cómo debe comportarse un grupo de objetos. Por ejemplo, es posible que desee ordenar que los objetos comparables se puedan comparar para igualdad y hash, etc.
Usar la herencia es, en última instancia, una opción de diseño. Esté atento a los casos en los que defina los mismos métodos en varias clases; Esos son casos excelentes en los que puede factorizar esos métodos en una clase base. Lo mismo ocurre con las clases que observan algunas de las mismas características: puede garantizar la coherencia al poner esas características en una interfaz para ser implementadas por esas clases relacionadas.
La herencia es un gran concepto en OOP que va mucho más allá de PHP. Te recomiendo que leas el artículo de wikipedia sobre herencia y quizás Patrones de diseño de The Gang of Four .
Creo que su comprensión de la herencia es principalmente correcta. El siguiente paso sería usarlo en producción.
- ¿Cuándo se debe
implement
oextend
? - ¿Cuáles son algunos ejemplos del mundo real?
¿Es esto correcto?
La implementación parece ser una forma de hacer cumplir que ciertos métodos existen en una clase, y que estos métodos funcionan correctamente. Sin embargo, la implementación no es una forma de pasar variables o "configuraciones" a la clase.
Escenario de la vida real esperado: tengo una plataforma de comercio electrónico que ofrece múltiples clases de pago que siguen el mismo diseño. Cuando se debe agregar una nueva clase de pago, es realmente fácil seguir el diseño definido de la interface
para garantizar que todos los bits y piezas estén allí desde el principio.
La extensión de clases hace que la clase extendida (¿hijo?) Herede todo de su clase principal, excepto los métodos y las variables declarados como private
.
Escenario esperado de la vida real: Tengo una clase llamada sessions
con dos clases secundarias llamadas sessioncookies
y databasesessions
. sessioncookies
y databasesessions
, juntos heredan una cantidad de opciones de configuración mutua de sus sesiones principales, lo que facilita el cambio de una opción de configuración para afectar todo tipo de almacenamiento de datos de visitante eventual.