Foros del Web » Programando para Internet » PHP »

PHP OO Herencia. Convertir un objeto en otro objeto que hereda del primero???

Estas en el tema de Herencia. Convertir un objeto en otro objeto que hereda del primero??? en el foro de PHP en Foros del Web. Hola!, Me estoy iniciando en PHP y la programación orientada a objetos y me encuentro con la siguiente duda que a ver si podéis ayudarme ...
  #1 (permalink)  
Antiguo 09/12/2015, 13:37
Avatar de jmgilfer  
Fecha de Ingreso: diciembre-2015
Ubicación: Madrid
Mensajes: 2
Antigüedad: 8 años, 4 meses
Puntos: 0
Herencia. Convertir un objeto en otro objeto que hereda del primero???

Hola!,

Me estoy iniciando en PHP y la programación orientada a objetos y me encuentro con la siguiente duda que a ver si podéis ayudarme a resolverla.

Tengo una clase 'Usuario' de la que heredan otras dos clases, 'Cliente' y 'Admon'.

Bien, lo que estoy intentando, es una vez instanciada la clase Usuario, y por lo tanto ya tengo un objeto de clase 'Usuario', es convertir este objeto al realizar el login del usuario, bien en un objeto de clase 'Cliente' o bien de clase 'Admon'.

A través de un método que tengo definido en la clase 'Usuario', estoy intentando cambiar la clase del objeto ...

(Admon)$this;

Pero me encuentro con el error que me indica que no puedo llamar a $this (Parse error: syntax error, unexpected '$this' (T_VARIABLE))

Así pues, la dudas con las que me encuentro son:

- ¿se puede realizar esto en php?, es decir, ¿puedo cambiar la clase de un objeto instanciado a otra clase hija de la primera?,

- o por el contrario, lo que debería realizar es una nueva instanciación de la Clase Hija ('Cliente' o 'Admon' según corresponda) y reemplazar la variable en donde se encuentra el objeto 'Usuario' por el nuevo objeto 'Cliente' o 'Admon'.


Bueno, espero haber sabido explicarme y que puedan ayudarme...
Muchas gracias de antemano!!
  #2 (permalink)  
Antiguo 09/12/2015, 14:15
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Herencia. Convertir un objeto en otro objeto que hereda del primero???

Creo que facilitarías las cosas si colocas el código de lo que estas queriendo hacer.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 09/12/2015, 14:38
 
Fecha de Ingreso: octubre-2015
Ubicación: España
Mensajes: 21
Antigüedad: 8 años, 6 meses
Puntos: 6
Respuesta: Herencia. Convertir un objeto en otro objeto que hereda del primero???

Hola,

Eso no es posible... deberías hacer un recast del objeto, llamarlo desde un principio como Cliente o Admon con un condicional, o de la forma siguiente:

Código PHP:
<?php

    
class Usuario {
        private 
$name;
        private 
$email;
        private 
$pwd;
        function 
__construct($name,$email,$pwd) {
            
$this->name $name;
            
$this->email $email;
            
$this->pwd $pwd;
        }
        function 
getName() {
            return 
$this->name;
        }
        function 
getEmail() {
            return 
$this->email;
        }
        public function 
getCliente() {
            return new 
Cliente($this->name,$this->email,$this->pwd);
        }
        public function 
getAdmon() {
            return new 
Admon($this->name,$this->email,$this->pwd);
        }
    }

    class 
Cliente extends Usuario {
        private 
$cart;
        public function 
setCart($array) {
            
$this->cart $array;
        }
        public function 
getCart() {
            return 
$this->cart;
        }
    }
    class 
Admon extends Usuario {
        private 
$permisson;
        public function 
setPermisson($permisson) {
            
$this->permisson $permisson;
        }
        public function 
getPermisson() {
            return 
$permisson;
        }
    }

    
$usuario = new Usuario("Pepito","[email protected]",sha1("contraseña de ejemplo"));
    
var_dump($usuario);
    
$cliente $usuario->getCliente();
    
var_dump($cliente);    
    
$admon $usuario->getAdmon();
    
var_dump($admon);

?>
Así llamas primero al usuario y si tienes un método que verifique si es usuario o administrador puedes retornar directamente $admon o $cliente al llamar a usuario...

Espero que te haya ayudado!
  #4 (permalink)  
Antiguo 10/12/2015, 02:23
Avatar de jmgilfer  
Fecha de Ingreso: diciembre-2015
Ubicación: Madrid
Mensajes: 2
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Herencia. Convertir un objeto en otro objeto que hereda del primero???

Buenos días,

Muchas gracias por vuestra ayuda.


Esto es lo que estaba intentando realizar...

public function establecerUsuarioDeSesion()
{
$tipoUsuario=$this->getTipoUsuario();
$idusrtipo=$tipoUsuario->getIdUsrTipo();

if ($idusrtipo=="2") {
(Admon)$this;
}
else {
(Cliente)$this;
}
$_SESSION['theUser']=serialize($this);

}


y tras vuestros comentarios...

public function establecerUsuarioDeSesion()
{
$tipoUsuario=$this->getTipoUsuario();
$idusrtipo=$tipoUsuario->getIdUsrTipo();

if ($idusrtipo=="2") {
$theUser=new Admon($this->getIdUsuario());
}
else {
$theUser=new Cliente($this->getIdUsuario());
}
$_SESSION['theUser']=serialize($theUser);

}


Lo dicho, muchas gracias!

Etiquetas: herencia, objeto, variable
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:55.