Foros del Web » Programando para Internet » PHP »

PHP OO variable accesible por otras clases pero solo seteada por una

Estas en el tema de variable accesible por otras clases pero solo seteada por una en el foro de PHP en Foros del Web. Buenas! quería preguntaros como es la mejor forma de hacer lo siguiente. Tengo una clase login que comprueba el usuario, etc. En esta clase me ...
  #1 (permalink)  
Antiguo 19/02/2013, 06:34
 
Fecha de Ingreso: junio-2008
Mensajes: 165
Antigüedad: 15 años, 10 meses
Puntos: 6
variable accesible por otras clases pero solo seteada por una

Buenas! quería preguntaros como es la mejor forma de hacer lo siguiente.

Tengo una clase login que comprueba el usuario, etc. En esta clase me gustaría poder setear una variable que fuera visible para el resto de clases. Ahora mismo tengo un index.php que hace un require de una clase conf.php y este tiene todos los require necesarios para que cualquier clase dentro del directorio controllers pueda ser accedida por ellos mismos, ahi tengo login.controller.php, recepcion.controller.php... fuera tengo un directorio inc que he llamado user_settings.php y es una clase en la cual solo tiene setUserSettings y getUserSettings como metodos declarados estaticos, la variable user_settings es una variable estatica, en definitiva tengo esto:

Código PHP:
Ver original
  1. class globalSettings{
  2.     private static $user_settings;
  3.    
  4.     public static function setUserSettings($value){
  5.         self::$user_settings = $value;
  6.     }
  7.    
  8.     public static function getUserSettings(){
  9.         return self::$user_settings;
  10.     }
  11.  
  12.  
  13. }

Me gustaría que solo login.php pudiera hacer setUserSettings y el resto de clases pudiera hacer getUserSettings, sabeis como podría hacerlo?
  #2 (permalink)  
Antiguo 19/02/2013, 10:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: variable accesible por otras clases pero solo seteada por una

¿De verdad necesitas ayuda para esto?

Si el resto de las clases deberían usar únicamente el getter pues eso y ya, si tu no les dices que hagan otra cosa no la van a hacer, las clases no se ejecutan por si solas.

A lo que voy es que esto me parece una burrada:
Cita:
Me gustaría que solo login.php pudiera hacer setUserSettings y el resto de clases pudiera hacer getUserSettings, sabeis como podría hacerlo?
Obvio se va a ejecutar únicamente lo que indiques en tu programación, nada más, si programas de tal forma en que se usen dichos métodos como esperas no deberías tener ni dudas.

Ahora, que para todo esto me imagino que si sabes invocar métodos estáticos, si no pues entonces consulta un manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/02/2013, 10:16
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: variable accesible por otras clases pero solo seteada por una

Cita:
Iniciado por cronosmen Ver Mensaje
Me gustaría que solo login.php pudiera hacer setUserSettings y el resto de clases pudiera hacer getUserSettings, sabeis como podría hacerlo?
login".php" es una clase?
  #4 (permalink)  
Antiguo 19/02/2013, 10:16
 
Fecha de Ingreso: junio-2008
Mensajes: 165
Antigüedad: 15 años, 10 meses
Puntos: 6
Respuesta: variable accesible por otras clases pero solo seteada por una

Tienes razón... Estoy desarrollando una aplicación en MVC y me estoy desviando bastante, actualmente lo que hago es digamos que el usuario accede a login y este llama al controlador de login.php, pero necesito por ejemplo tener en un array donde guardar que controladores tiene el usuario, para así comprobar si existe en el array login => controller.login_extend.php y si no existe cargar el default controller.login.php. Para esto tengo un archivo index.php que hace el redireccionamiento si es un post o get lleva a request_handler.php que ejecuta un metodo de un controlador y si no lleva a route.php que se encarga de llamar al controlador para que se ejecute, pero claro cada vez que llamo a un controlador ahora tengo la pega de que tengo que hacer new()... y tengo que volver a hacer la consulta de que controladores tiene el usuario disponible, me gustaría hacer algo que me permita tener esos controladores en un array sin tener que estar haciendo en cada accion un new()...

Perdon si no me explique, si pudieras darme alguna sugerencia te lo agradeceria mucho, ando bastante liado con todo esto
  #5 (permalink)  
Antiguo 19/02/2013, 10:33
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: variable accesible por otras clases pero solo seteada por una

Pero..esto que dices ahora no tiene nada que ver con el problema anterior...
Sobre lo que dices, guardando ese array en una variable miembro estática, que ya lo haces, es bastante..Si, ademas, metes el array, serializado, en memcache, mejor aun.
O, no te lias, y en vez de arrays, creas directorios:
Si se llama a la accion "login", buscas si existe /controllers/extend/login.php , y si no, abres /controllers/login.php.
Es más, si trabajas un poco con el autoloader y namespaces, puedes hacer directamente
Código HTML:
Ver original
  1. if(class_exists('\controllers\extended\Login')) { .... }
  #6 (permalink)  
Antiguo 19/02/2013, 10:46
 
Fecha de Ingreso: junio-2008
Mensajes: 165
Antigüedad: 15 años, 10 meses
Puntos: 6
Respuesta: variable accesible por otras clases pero solo seteada por una

Muchas gracias por tu asesoramiento dashtrash! eso del autoloader suena muy bien!

creo que esto no me serviría:

if(class_exists('\controllers\extended\Login')) { .... }

Por que en base de datos es dónde se guarda la configuración como controladores a los que puede acceder segun su rol y si estos son los genericos (si no viene nada son los genericos) o si son algun extend que simplemente heredan del normal. Voy a investigar un poco mas sobre autoloader, te lo agradezco mucho, almenos tengo por donde tirar
  #7 (permalink)  
Antiguo 19/02/2013, 10:57
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: variable accesible por otras clases pero solo seteada por una

Cita:
Iniciado por cronosmen Ver Mensaje
Por que en base de datos es dónde se guarda la configuración como controladores a los que puede acceder segun su rol
Sólo como una nota....si lo que se guarda en base de datos es una *configuración*, significa que esa configuración puede estar en la propia clase controladora.
Si controlador tiene un metodo abstracto getRequiredRole() , no tienes por qué ir a base de datos para saber si es posible o no acceder a ese controlador.
  #8 (permalink)  
Antiguo 19/02/2013, 11:07
 
Fecha de Ingreso: junio-2008
Mensajes: 165
Antigüedad: 15 años, 10 meses
Puntos: 6
Respuesta: variable accesible por otras clases pero solo seteada por una

mmm eso suena muy interesante, pero tampoco quiero abusar, podrías explicarme como puedo utilizar lo del metodo abstracto? un ejemplo que pueda tomar en cuenta? mil gracias de verdad, lo que me dices me es de mucha utilidad y gano tiempo para el desarrollo!
  #9 (permalink)  
Antiguo 19/02/2013, 15:30
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: variable accesible por otras clases pero solo seteada por una

Si en tu sistema, los usuarios tienen uno o varios roles, y los controladores requiren un cierto rol para poder ser accedidos, la clase base Controlador, puede definir un metodo abstracto getRequiredRole(), junto con un método canAccess($user), que comprueba si el usuario tiene el rol requerido.
Al ser un método abstracto, todas las clases derivadas de controller tienen que implementar la función.
Otra opción, es hacer una implementación por defecto de getRequiredRole() que siempre devuelva "PUBLIC" o "SUPERADMIN" (o siempre deja acceso, o siempre requiere el nivel máximo), y que las clases derivadas (cada uno de los controladores ), la sobreescriban.

El hacer abstracto el metodo getRequiredRole() es para forzar a que se tenga que pasar un minuto especificando qué rol es apropiado para cada controlador, en vez de simplemente "confiar" en la configuración por defecto.

Etiquetas: clases, 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 03:24.