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

PHP OO Evitar instanciar clase padre ante de su hija

Estas en el tema de Evitar instanciar clase padre ante de su hija en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, Estoy intentando hacer un login. Hay distintos tipos de usuarios que pueden logearse y dependiendo si es administrador, operario, administrativo, etc podra realizar una ...
  #1 (permalink)  
Antiguo 07/05/2013, 18:30
 
Fecha de Ingreso: mayo-2007
Mensajes: 54
Antigüedad: 17 años, 5 meses
Puntos: 1
Evitar instanciar clase padre ante de su hija

Hola,

Estoy intentando hacer un login. Hay distintos tipos de usuarios que pueden logearse y dependiendo si es administrador, operario, administrativo, etc podra realizar una tarea u otra.

Lo que habia pensado es, tener una clase Usuarios (entre otros metodos, todos van a tener un metodo login, otro logout y otro obtener tipo de usuario), luego una clase para administrador, otra para operario y administrativo con sus atributos y metodos correspondientes heredando de la clase Usuarios.

En la clase usuario estoy haciendo el login (ya que nose quien esta intentando logearse, si es admin, operario o administrativo), de modo que lo que primero que haria es consultar si el mail y pass son correctos y despues con otro metodo obtendria que tipo de usuario es.

Si obtengo que es administrador instancio la clase administrador, si es operario instancio operario y sino administrativo. Supongamos que se loguea un administrador, aqui es donde no me cierran las cosas porque en teoria ya instancie la clase padre (al hacer login instancie usuario para acceder a su metodo) y ahora voy a estar intentando instanciar administrador quien a su vez va a instanciar la clase padre usuarios.... creo que hay algo que no estoy teniendo en cuenta. Como resolverian esto?

La clase usuario es mas o menos como sigue:

Código PHP:

require_once 'DB.class.php';

class 
Usuarios {    
    protected 
$db;
    private 
$email;
    private 
$pass;
    
    
/* Se obtiene la conexion con la DB */
    
protected function __construct() {
        
$this->db DB::getInstance();              
    }
    
    
/* Se setea el email */    
    
protected function setEmail($email) {
        
$this->email mysql_real_escape_string($email);
    }
    
    
/* Se setea el pass */    
    
protected function setPass($pass) {
        
$this->pass mysql_real_escape_string($pass);
    }
    
    
/* Se obtiene el email */    
    
protected function getEmail() {
        return 
$this->email;
    }
    
    
/* Se obtiene el pass */    
    
protected function getPass() {
        return 
$this->pass;
    }
    
    protected function 
__destruct() {
        return 
true;
    }    
    
    
/* Funcion para verificar el login a la aplicacion, si el login es correcto devuelve true y sino false */
    
protected function loginUser() {
        
$query sprintf("select * from usuarios where email = '%s' and pass = '%s' and estado='A'"$this->email$this->pass);
        if (
$this->db->existRow($query))
            return 
true;
        return 
false;
    } 


Gracias
  #2 (permalink)  
Antiguo 07/05/2013, 18:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Evitar instanciar clase padre ante de su hija

Para este tipo de problemas se suelen utilizar roles, hacerlo a base de herencia es poco practico, ya que por cada rol nuevo estas agregando una clase.
Te sugiero que investigues los dos modelos mas utilizados, ACL y RBAC.

Fuera de lo antes mencionado, cual es la razón de tener mutators/accessors protected ?

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 07/05/2013, 18:50
 
Fecha de Ingreso: mayo-2007
Mensajes: 54
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: Evitar instanciar clase padre ante de su hija

Ya estuve buscando y encontre un ejemplo de RBAC, no hay ninguna razon para tenerlos protected es que copie de otro lado... muchas gracias por la info

Etiquetas: clase, hija, instanciar, mysql, padre, php, select, usuarios
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:46.