martes, 19 de abril de 2011

Herencia en PHP parte 2

Bien hoy veremos un ejemplo sencillo el cual podria que la clase Persona tiene atributos privados nombre y apellido, el constructor del Padre donde carga estos datos es público, de la misma forma que el toString, por consiguiente la clase Hijo podrá construir el objeto, cargarlo con su nombre y apellido y desplegar sus datos cuando haga un echo de Hijo, todo, sin acceder directamente a los atributos de Persona (porque son privados) pero sí pudo hacer uso de ellos a través de métodos públicos o protegidos desde la clase Hijo y que fueron heredados de su padre.
Por consiguiente, veamos algunos ejemplos reales: definiremos una clase muy genérica llamada Persona que usaremos luego para crear distintas clases un poco más concretas y particulares, que se basarán siempre en esa clase. Aquí hay un claro reuso de código, ya que todas aprovecharán lo que ya tiene definido Persona, pero también es claro que existe una relación de parentesco con sus hijos (“no se hereda por el simple hecho de necesitar acceder al código”).

Presta atención, esta herencia no hace nada más que definir que un usuario es, además de tipo “Usuario”, de tipo “Persona”, pero como no hay atributos o métodos “no privados” (public, protected), no tiene acceso directo (“no es visible”) a lo que es “privado” en su Padre.
el usuario es ahora de dos tipos, por consiguiente un “Type Hinting” (validación de tipos) que filtre personas aceptará al usuario porque “el Usuario es una Persona”.

Ejemplo 2 Persona agrega un constructor

En este caso tendremos un método construir que es público, por lo tanto podemos usarlo desde la clase “hija” de forma automática.
Hay que prestar especial atención que en PHP el constructor del padre no se ejecuta de forma automática cuando el hijo define su propio constructor, por lo tanto hay que invocar de forma explícita el constructor del padre.
Repasando: si el hijo no define su constructor, igual que sucede con el toString, el destructor, etc, estos serán heredados de su Padre y sí son ejecutados de forma automática.
Si el usuario define su propio constructor:

Aquí, la clase usuario visualiza el método público de su padre, pero no ve directamente los atributos privados, pero, como ahora “Usuario es una Persona”, aunque no podamos “manipular directamente” los atributos, estos están ahí.

Continuara .....

comenten no sean bayuncos ...

No hay comentarios:

Publicar un comentario