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

Herencia - Metodos con el mismo nombre.

Estas en el tema de Herencia - Metodos con el mismo nombre. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Que pasa cuando yo hago una subclase de una clase madre y escribo en esta un metodo con el mismo nombre que el de la ...
  #1 (permalink)  
Antiguo 15/12/2004, 12:35
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 9 meses
Puntos: 4
Herencia - Metodos con el mismo nombre.

Que pasa cuando yo hago una subclase de una clase madre y escribo en esta un metodo con el mismo nombre que el de la clase madre.
Cual es el metodo que vale ?.

Aclaro que actualmente tengo PHP4.
Tendria que actualizarlo, no ?

Pueden coexistir PHP4 y PHP5 detro del mismo servidor ?
__________________
| Cabeza De Raton |
  #2 (permalink)  
Antiguo 15/12/2004, 13:31
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años, 1 mes
Puntos: 1
Bueno ...

Ante todo, como has logrado poner dos metodos con el mismo nombre ??? Lo has puesto virtual??? En cuanto a tu pregunta puedo decirte que donde primero se busca el método es en la clase hija (subclase) y luego se pasa a la clase padre en caso de que el método no exista. Por ejemeplo en C++ sería algo como esto:
Código PHP:
class CClase{
 private:
  
int parametro;
 public:
  
virtual void InitValues(int tipo) = 0# Clase abstracta
}

class 
CSubClase: public CClase{
 public:
  
void InitValues(int tipo); # Redefinición de la clase

ahora si en tu programa principal haces esto:
Código PHP:
 CClase obj = new CSubClase;
 
obj->InitValues(5); 
si te das cuenta primero se llama al método InitValues de la clase CSubClase y luego sino se encuentra en esta la busca en CClase.

Si mas no recuerdo vi un POST por ahi que hablaba algo de PHP 4 y PHP 5 a la vez en una misma PC. Realiza una búsqueda en el Foro.

Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 15/12/2004 a las 13:32
  #3 (permalink)  
Antiguo 15/12/2004, 14:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 23 años
Puntos: 129
Ya tenemos foro de POO para PHP ... así que proceo a mover el mensaje a dicho foro.

Un saludo,
  #4 (permalink)  
Antiguo 15/12/2004, 15:32
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 21 años, 3 meses
Puntos: 41
Bueno... como explica Reynier, cuando llamas a un método de una clase, siempre se busca el método en la definición de la propia clase, y si no se encuentra, se busca en la clase padre... por eso, el que vale para las hijas es el que redefiniste en ellas.

Saludos
  #5 (permalink)  
Antiguo 15/12/2004, 20:15
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 9 meses
Puntos: 4
Gracias che.
__________________
| Cabeza De Raton |
  #6 (permalink)  
Antiguo 16/12/2004, 00:02
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 21 años, 2 meses
Puntos: 1
Código PHP:
class mother_class {

    public function 
__costruct() {
          return 
true;
    }

    public function 
repeated_function() {
                  echo 
"voy a ser reescrita";
                  return 
true;
    }
}

final class 
child_class extends mother_class {

       public function 
__construct() {
              return 
true;
       }
 
       public function 
repeated_function() {
                 echo 
"estoy reescribiendo la funcion de la clase madre";
                 echo 
"sin embargo aun existe la funcion madre, la llamo asi:";
                  
parent::repeated_function();
                 return 
true;
        }

como ves, reescribo el metodo de la clase madre, sin embargo aun sigue disponible desde parent::metodo
para php4 es igual, solo que no existe la visibilidad y otras palabras importantes, por ejemplo final, evita que se reescriban los metodos.

Reyner, un metodo abstracto no esta siendo reescrito, como la pregunta indica, un metodo abstracto esta siendo implementado por una clase hija. Asi mismo un metodo abstracto esta obligado a ser implementado por las clases hijas.

saludos
  #7 (permalink)  
Antiguo 16/12/2004, 12:20
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años, 1 mes
Puntos: 1
Pues ....

Si claro ya entendí lo que me dices sism82. A próposito donde encuentro un buen manual para POO con PHP5? Si tienes alguno me lo podrías enviar por correo a [email protected] ??

Salu2
__________________
Ing. Reynier Pérez Mira
  #8 (permalink)  
Antiguo 17/12/2004, 08:10
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años, 1 mes
Puntos: 1
Preguntas

Hola sism82, tengo algunas preguntas para hacerte acerca del ejemplo que pones. Lo primero es que si yo puedo hacer esto con PHP:
Código PHP:
 class CCirculo{
   private:
     
$ratio;
     
$xcenter;
     
$ycenter;
   public:
     
__construct();
     
void MakeCircle($param_ratio,$param_xcenter,$param_ycenter);
      
_getRatio();
      
_getXCenter();
      
_getYCenter();
 } 
Lo segundo, que significa esto en la declaración de la clase esa en PHP que pones como ejemplo en tu POST:
Código PHP:
 final class child_class extends mother_class 
que significa "final", "child_class" y "extends" esa es la forma de hacer herencia y polimorfismo en PHP ??? O sea esto en C++:
Código PHP:
 class CMadre{
  private: 
   ....
  public:
   ....
 }
  
 class 
CHija: public CMadre{
  private:
   ....
  public:
   ....
 } 
Y tercero: Donde encuentro algún manual o documentación buena de PHP orientado a objetos donde vengan ejemplos de estas cosas porque de verás que se POO con C++ pero con PHP estoy en blanco.

Salu2
__________________
Ing. Reynier Pérez Mira
  #9 (permalink)  
Antiguo 17/12/2004, 08:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 23 años
Puntos: 129
En general . Reynier . lo que ves en "verde" cuando se colorea la sintax son parámetro de la definición (en ese caso) de una classe de PHP. Todo lo demás son valores.

POO para PHP 4
www.php.net/oop

POO para PHP 5
http://www.php.net/manual/en/language.oop5.php

Creo que con la "base" que ya tienes de POO en general ... con eso deberias ir bien.

Un saludo,
  #10 (permalink)  
Antiguo 17/12/2004, 09:39
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 21 años, 2 meses
Puntos: 1
reyner:

El polimorfismo en php se utiliza a través de clases abstractas e interfaces, como en Java. Con C++ no tengo experiencia. La palabra 'final' significa que es una clase final, es decir, ya no puede heredar. Ahi termina su legado :p

La palabra extends, es el indicador de que la clase que esta siendo definida va a extender a la clase madre, es decir, es la forma de decir que es una clase hija de...

zend.com y php.net son las fuentes de información que he utilizado para aprender.

Un saludo!
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 02:46.