Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/07/2008, 17:25
Avatar de Calisco
Calisco
 
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 2 meses
Puntos: 4
LLamar a metodo abuelo.

Tenemos una discusión con un compañero de trabajo, y estamos buscándole el pelo al huevo.
Básicamente debemos resolver un dilema conceptual al redefinir un método de una clase nieta.
Supongamos ...
Código PHP:
// clase Abuelo
class {
    public function 
miMetodo () {
        
    }
}

class 
extends {
    public function 
miMetodo () {
    
/*
    Código que define el comportamiento del método antes de invocar al método padre.
    */

    // Llamamos metodo padre (A)
    
parent::miMetodo();
    }
}

class 
extends {
    public function 
miMetodo () {
    
/*
    Código que define el comportamiento del método antes de invocar al método padre.
    */

    // Llamamos metodo padre (B)
    
parent::miMetodo();
    }

Nuestro objeto se instancia de la clase C.

Analizando la naturaleza de nuestra aplicación cada uno ha propuesto una solción para resolver nuestro problema.

La primera es justamente invocar al metodo abuelo (clase A) miMetodo() desde la clase C salteando la definición del método padre (clase B) ya que, a causa de otras modificaciones necesarias en otros métodos de la clase, este código afecta en un 100% al buen funcionamiento de la aplicación. O sea, no funca.
Código PHP:
class extends {
    public function 
miMetodo ($condicion true) {

    
/*
    Código que define el comportamiento del método antes de invocar al método padre.
    */
    // Llamamos metodo abuelo (A)
    
A::miMetodo();
    }

La segunda solución al problema propone añadir un parámetro al método miMetodo () redefinido en la clase C. Sería algo como ...
Código PHP:
class extends {
    
    public function 
miMetodo ($condicion true) {

    
/*
    Código que define el comportamiento del método antes de invocar al método padre.
    */
    // Agregamos comportamiento condicional en función del nuevo parámetro $condicion agregado por primera vez en esta clase C
        
if ($condicion) ...
        else ...

    
// Llamamos metodo padre (C)
    
parent::miMetodo();
    }

Nos gustaría saber que opinan de ambos casos. Por un lado tenemos la posibilidad de saltar el método padre yendo directamente al método abuelo. Esto implica que en la definición del método se debe programar la funcionalidad correcta del método padre.

Y por otro lado la inclusión de un parámetro en la re definición del método y no saltear el método padre.

Hay varias cosas más que nos obligan a definir este comportamiento; por ejemplo, y algo muy importante, no podemos tocar ni la clase A ni la B. Si prestamos atención, en ninguno de los dos casos hacemos esto.

En fin ... saludos. Pregunen todo lo que quieran.
__________________
| Cabeza De Raton |