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

Sobreescribir Metodo

Estas en el tema de Sobreescribir Metodo en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Que tal, la pregunta es la siguiente estoy comenzando con la POO en php y estoy imaginando algunas cosillas, estoy haciendo las funciones básicas a ...
  #1 (permalink)  
Antiguo 23/01/2007, 17:54
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 5 meses
Puntos: 1
Sobreescribir Metodo

Que tal, la pregunta es la siguiente estoy comenzando con la POO en php y estoy imaginando algunas cosillas, estoy haciendo las funciones básicas a una bd con los objetos propios Persona, Empresa pero necesito sobreescribir un metodo. Aqui muestro parte del codigo a ver que tal...
Código PHP:
<?php
require_once 'Conectar.class.php';

class 
Persona {

    private 
$nombre;
    private 
$apellido;
    private 
$color;
    private 
$id;

    public function 
Persona($id$nombre$apellido$color){
        
$this->setId($id);
        
$this->setNombre($nombre);
        
$this->setApellido($apellido);
        
$this->setColor($color);
    }

    public function 
buscar()
    {
        
$sql "SELECT * FROM persons where id=".$this->getId();
        
$sqlmysql_query($sql);
        if (
mysql_num_fields($sql)!="0")
        {
            list(
$id$nombre$apellido$color) = mysql_fetch_array($sql);
            
$persona= new Persona($id$nombre$apellido$color);
            return 
$persona;
        }
    }
    
    public function 
guardar()
    {
        
$sql "INSERT INTO persons SET nombre='".$this->getNombre()."', apellido= '".$this->getApellido()."', favorite_color= '".$this->getColor()."'";
        if (
mysql_query($sql))
        {
            return 
"Registro Guardado";
        }
        else
        {
            return 
"Ha Ocurrido un Error";
        }
    }

    public function 
getId() 
    {
        return 
$this->id;
    }
    
    public function 
setId($id)
    {
        
$this->id $id;
    }
    
    public function 
getNombre() 
    {
        return 
$this->nombre;
    }
    
    public function 
setNombre($nombre)
    {
        
$this->nombre $nombre;
    }
    
    public function 
getApellido()
    {    
        return 
$this->apellido;
    }
    
    public function 
setApellido($apellido)
    {
        
$this->apellido $apellido;
    }
    
    public function 
getColor()
    {    
        return 
$this->color;
    }
    
    public function 
setColor($color)
    {
        
$this->color $color;
    }
}
?>
El metodo que necesito sobreescribir es Persona() por que cuando hago consultas me trae los valores con los que inicialize el objeto. Gracias... Saludos
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #2 (permalink)  
Antiguo 23/01/2007, 19:26
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: Sobreescribir Metodo

Seria mejor que en el constructor o en los metodos set.... alteraras los valores de la variable....
Siempre te regresa el valor con la que las inicializaste, por que en ningun momento le pasas otro valor; lo que quieres hacer es pasarle valoes de la DB verdad?...algo asi seria:
Código PHP:
while($row=mysql_fetch_array($qry){
        
$this->setNombre=$row[nombre];

Un saludo.
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.

Última edición por B**; 23/01/2007 a las 19:38
  #3 (permalink)  
Antiguo 23/01/2007, 19:35
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: Sobreescribir Metodo

Si estas usando PHP5, te recomiendo usar todas sus caracteristicas como los constructores:
Código PHP:
class algo {
     public function 
__construct() {

     }

  #4 (permalink)  
Antiguo 24/01/2007, 06:27
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Sobreescribir Metodo

Que tal, gracias a B** y a GatorV, necesito sobreescribir este metodo y no se como hacerlo public function Persona($id, $nombre, $apellido, $color){ , lo he cambiado por public function __construct($id, $nombre, $apellido, $color){ y otro public function __construct(){, esto lo necesito por que la primera vez que inicializo un objeto de tipo Persona tengo que hacerlo asi $persona = new Persona("", "Jose", "Quintero", "Verde") y cuando hago una consulta quiero crear un nuevo objeto Persona seteandole los valores que traigo de la consulta a la bd y resulta que no me setea los valores sino que me muestra lo que yo habia seteado al inicio, no se si me explique bien. el Metodo buscar tambien lo he cambiado un poco a quedado asi
Código PHP:
public function buscar()
    {
        
$sql "SELECT * FROM persons where id=".$this->getId();
        
$sqlmysql_query($sql);
        if (
mysql_num_fields($sql)!="0")
        {
            list(
$id$nombre$apellido$color) = mysql_fetch_array($sql);
            
$persona = new Persona($id$nombre$apellido$color);
            
$persona->setNombre($nombre);
            
$persona->setApellido($apellido);
            
$persona->setColor($color);
            return 
$persona;
        }
    } 
Esto con el fin de cuando haga el retorno de la función me devuelva un objeto para poder trabajar con el. Espero me puedan ayudar... Saludos
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #5 (permalink)  
Antiguo 24/01/2007, 07:09
 
Fecha de Ingreso: febrero-2001
Mensajes: 1.374
Antigüedad: 23 años, 2 meses
Puntos: 11
Re: Sobreescribir Metodo

Pase a ver el tema de las frameworks y ya que estoy por aca te doy mi punto de vista sobre lo que planteas:

La clase esta mal estructurada, fijate como la cambie. Ahora son dos clases, Personas y Persona. No podes incluir los metodos generales de Personas en cada instancia creada del objeto Persona, por lo tanto ahora nos referimos a Personas y Persona.


Código PHP:
 // Obtener el registro de una persona cuyo id es 12
$objPersona Personas::buscar(12);

// Mostrar datos de la persona en pantalla
print 'Nombre    :' $objPersona->getNombre();
print 
'Appelido  :' $objPersona->getApellido();
print 
'Color     :' $objPersona->getColor();

// Duplicar registro
Personas::guardar($objPersona->getNombre(),
                  
$objPersona->getApellido(),
                  
$objPersona->getColor());
                  
// Crear un nuevo registro y mostrar resultado
print Personas::guardar('Fede''Lalala''negro');
 
 class 
Personas
 
{
    public function 
buscar($personaId)
    {        
        
$sql "SELECT * FROM persons where id=".$personaId;
        
$sqlmysql_query($sql);
        
        if (
mysql_num_fields($sql)!="0")
        {
            list(
$id$nombre$apellido$color) = mysql_fetch_array($sql);
            return new 
Persona($id$nombre$apellido$color);
        }
        
        return 
false;
    }
    
    public function 
guardar($personaNombre$personaApellido$personaColor)
    {
        
$sql "INSERT INTO persons SET nombre='".$personaNombre."', apellido= '".$personaApellido."', favorite_color= '".$personaColor."'";
        if (
mysql_query($sql))
        {
            return 
"Registro Guardado";
        }
        else
        {
            return 
"Ha Ocurrido un Error";
        }
    }
 } 
 
 class 
Persona 
 
{

    protected 
$nombre;
    protected 
$apellido;
    protected 
$color;
    protected 
$id;

    public function 
__construct($id$nombre$apellido$color)
    {
        
$this->setId($id);
        
$this->setNombre($nombre);
        
$this->setApellido($apellido);
        
$this->setColor($color);
    }

    public function 
getId() 
    {
        return 
$this->id;
    }
    
    public function 
setId($id)
    {
        
$this->id $id;
    }
    
    public function 
getNombre() 
    {
        return 
$this->nombre;
    }
    
    public function 
setNombre($nombre)
    {
        
$this->nombre $nombre;
    }
    
    public function 
getApellido()
    {    
        return 
$this->apellido;
    }
    
    public function 
setApellido($apellido)
    {
        
$this->apellido $apellido;
    }
    
    public function 
getColor()
    {    
        return 
$this->color;
    }
    
    public function 
setColor($color)
    {
        
$this->color $color;
    }

  #6 (permalink)  
Antiguo 24/01/2007, 18:27
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Sobreescribir Metodo

La función guardar dentro de personas no debería sér declarada como static? (public static function bla bla bla...)

Saludos.
  #7 (permalink)  
Antiguo 24/01/2007, 18:59
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: Sobreescribir Metodo

Siguiendo la implementacion que hizo Tukzone, si debe de ser declarada como static.
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
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 08:17.