Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Ejecutar un método del abuelo.

Estas en el tema de Ejecutar un método del abuelo. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo el siguiente problema y espero puedan ayudarme. Estoy trabajando con PHP5 con MySQL. Todo el desarrollo lo estoy realizando usando objetos. Pero me ...
  #1 (permalink)  
Antiguo 07/12/2006, 14:21
 
Fecha de Ingreso: diciembre-2006
Mensajes: 3
Antigüedad: 17 años, 4 meses
Puntos: 0
Ejecutar un método del abuelo.

Hola, tengo el siguiente problema y espero puedan ayudarme.
Estoy trabajando con PHP5 con MySQL.
Todo el desarrollo lo estoy realizando usando objetos.
Pero me salio este caso y no se como solucionarlo.
Por ejemplo tengo una clase C que hereda de B y esta hereda
de A (C -> B -> A)
La clase A (básica) tiene un método protegido llamado SelectList
que es el encargado de ejecutar los querys.

La clase B sobreescribe ese método (SelectList) y el código sería
algo así:
$this->Query = $lQuery;
return parent::SelectList();

La clase C (que hereda de B) tiene un método SelectListByProperty
su implementación es algo así:
$this->Query = $lQuery;
return parent::SelectList();

Entonces he ahí el problema, que cuando ejecutó el método
SelectListByProperty, este asigna el query (esto esta bien)
pero cuando ejecuta: return parent::SelectList(); realmente
esta ejecutando el método SelectList pero de la clase B, pero
lo que yo deseo es que se ejecute ese método pero de la clase A.

Entonces, lo que yo necesito es hacer algo como:
return parent::parent::SelectList();
Por eso quisiera saber como se hace, porque yo no se.
Por favor solo díganme si se puede, y si se puede díganme como.
Por favor no me digan que cambie de nombre a los métodos, porque
no puedo hacerlo. (reglas que tengo que seguir)

De ante mano muchas gracias.

The Knight
  #2 (permalink)  
Antiguo 07/12/2006, 16:06
 
Fecha de Ingreso: diciembre-2006
Mensajes: 3
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Ejecutar un método del abuelo.

Entre pruebas y pruebas encontre la solución y esta es:
El método SelectListByProperty de la clase C, en su implementación
puede haber lo siguiente:

$this->Query = $lQuery;
return A::SelectList(); (en ves de parent::SelectList();)

Realmente simple.

Saludos

TheKnight
  #3 (permalink)  
Antiguo 07/12/2006, 16:30
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Re: Ejecutar un método del abuelo.

Pues si, si no me equivoco, lo q hacias es acceder al metodo de la clase de la cual estabas heredando, y con parent referenciabas a la clase de la cual heredabas, en ese caso , era la B.
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #4 (permalink)  
Antiguo 08/12/2006, 09:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Ejecutar un método del abuelo.

Solo para aclarar, cuando haces:
Código PHP:
A::SelectList(); 
Estas llamando al metodo SelectList de la clase A de forma estatica, asi que si usas PHP5, y el metodo no es estatico, un Warning se lanza, y en PHP6 te va a provocar un Error Fatal, asi que te recomiendo que tu funcion la declares como estatica:
Código PHP:
public static function SelectList() {} 
  #5 (permalink)  
Antiguo 10/12/2006, 09:14
 
Fecha de Ingreso: diciembre-2006
Mensajes: 3
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Ejecutar un método del abuelo.

Hummm..... pues si, en PHP6 puede dar ese problema.
Voy a analizar el CORE con el que trabajo, si es que ese
cambio no refleja cambios por otros lados, puede ser que
lo cambie.

Gracias por el dato.

The Knight

PD: Existe otra forma de hacerlo, aparte de la que encontre?
  #6 (permalink)  
Antiguo 10/12/2006, 11:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Ejecutar un método del abuelo.

Podrias tener un metodo final que fuera el que se encargara de hacer el query y renderear la lista, luego en cada hijo que vaya heredando solo haces una version aparte de el metodo y regresas la funcion final, algo asi:

Código PHP:
class {
     final protected function 
_selectList() {}
}

class 
extends {
     public function 
selectList($query) {
         
$this->query $query;
         return 
parent::_selectList();
     }
}

class 
extends {
     public function 
selectList($query) {
          
$this->query $query;
          return 
parent::_selectList();
     }

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:03.