Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO ¿Una clase puede tomar variables globales?

Estas en el tema de ¿Una clase puede tomar variables globales? en el foro de PHP en Foros del Web. Segun yo no se puede hacer por eso pido su ayuda Tengo un sistema que necesito cambiarle algunas variables que están estáticas ya que no ...
  #1 (permalink)  
Antiguo 25/11/2013, 09:58
 
Fecha de Ingreso: abril-2010
Ubicación: Cancun
Mensajes: 88
Antigüedad: 14 años
Puntos: 2
Pregunta ¿Una clase puede tomar variables globales?

Segun yo no se puede hacer por eso pido su ayuda

Tengo un sistema que necesito cambiarle algunas variables que están estáticas ya que no se pensaba en que un dia llegaría el momento de crear un archivo de configuración para poder cambiar automáticamente todos los valores en clases y funciones en funciones es algo sencillo pero en una clase no he podido, bueno no he intentado solucionarlo.


Mi config.php

Código PHP:
$config=array("Empresa"=>"Empresa CV","Direccion"=>"Calle 2 entre calle 5 y 7","email"=>"[email protected]"); 
en mis archivos de funciones lo incluyo

Código PHP:
include('config.php');

function 
a(){
    global 
$config;
    echo 
$config['Empresa'];
    
//Etc, ocupo las variables segun lo que tenga que hacer 

Ahora como le hago en una clase ya que no se como hacerlo

Código PHP:
include('config.php');
class 
{
     function 
__construct(){
          
//Como obtengo los valores del config ya que cuento con decenas de clases y seria muy problematico editar todas ya que le pegare al funcionamiento del sistema
          
$config=?
    }

Todo esto es por que funcionara en varias empresas diferentes y ya nomas cambiando el config aplique en clases y funciones los datos de la empresa.
  #2 (permalink)  
Antiguo 25/11/2013, 10:07
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Una clase puede tomar variables globales?

Probaste haciéndolo de la misma manera? ya que si es posible hacerlo, has la prueba que no te muerde

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 25/11/2013, 10:10
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: ¿Una clase puede tomar variables globales?

prueba a hacer el include dentro del metodo constructor de la clase y asi las cargara como variables de la clase
  #4 (permalink)  
Antiguo 25/11/2013, 10:14
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Una clase puede tomar variables globales?

Cita:
Iniciado por Dalam Ver Mensaje
prueba a hacer el include dentro del metodo constructor de la clase y asi las cargara como variables de la clase
No es necesario, ya que como comente es posible hacerlo.

Código PHP:
Ver original
  1. include('config.php');
  2. class a {
  3.      function __construct(){
  4.           global $config;
  5.           //incluso $GLOBALS['config'];
  6.     }
  7. }

Ahora bien si lo que desea es usarlo en toda la clase debe declarar una propiedad y el valor de esta sería $config. Así:

Código PHP:
Ver original
  1. include('config.php');
  2. class a {
  3.      private $config;
  4.      function __construct(){
  5.           global $config;
  6.           //incluso $GLOBALS['config'];
  7.           $this->config = $config;
  8.     }
  9. }

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 25/11/2013, 10:17
 
Fecha de Ingreso: abril-2010
Ubicación: Cancun
Mensajes: 88
Antigüedad: 14 años
Puntos: 2
Respuesta: ¿Una clase puede tomar variables globales?

Cita:
Iniciado por jonni09lo Ver Mensaje
No es necesario, ya que como comente es posible hacerlo.

Código PHP:
Ver original
  1. include('config.php');
  2. class a {
  3.      function __construct(){
  4.           global $config;
  5.           //incluso $GLOBALS['config'];
  6.     }
  7. }

Ahora bien si lo que desea es usarlo en toda la clase debe declarar una propiedad y el valor de esta sería $config. Así:

Código PHP:
Ver original
  1. include('config.php');
  2. class a {
  3.      private $config;
  4.      function __construct(){
  5.           global $config;
  6.           //incluso $GLOBALS['config'];
  7.           $this->config = $config;
  8.     }
  9. }

Saludos
Dalam siempre hago esto que acabas de mencionar se me ha pasado algo tan sencillo se me olvido

jonni09lo es cierto que se puede hacer eso pero leia que es inseguro, probare las dos maneras y la que me convezca, asi lo realizare
  #6 (permalink)  
Antiguo 25/11/2013, 10:17
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: ¿Una clase puede tomar variables globales?

Holas, eduardomxm.

A mí se me ocurre que puedes enviarle la configuración como un parámetro al constructor, no?
Creas una propiedad para que almacene ese valor y se lo asignas dentro del constructor... Habría que probar :)

Saludos!


PD: Jajaja, me demoré 5 minutos en responder (me llamaron por fono) y ya te habían respondido casi lo mismo que yo, cuek XD
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #7 (permalink)  
Antiguo 25/11/2013, 10:20
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Una clase puede tomar variables globales?

Pues si quieres mejorar la seguridad, vuelve el archivo config.php en una clase, así sería un poco mejor.

Archivo config.php
Código PHP:
Ver original
  1. Class config{
  2.     public $valor = 'valor1';
  3. }

El otro archivo
Código PHP:
Ver original
  1. include('config.php');
  2. class a {
  3.     private $config;
  4.     function __construct(){
  5.         $this->config = new config;
  6.     }
  7. }

Esa sería una alternativa que podrías usar (esta forma es usada por Joomla)

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #8 (permalink)  
Antiguo 25/11/2013, 10:21
 
Fecha de Ingreso: abril-2010
Ubicación: Cancun
Mensajes: 88
Antigüedad: 14 años
Puntos: 2
Respuesta: ¿Una clase puede tomar variables globales?

Cita:
Iniciado por quinqui Ver Mensaje
Holas, eduardomxm.

A mí se me ocurre que puedes enviarle la configuración como un parámetro al constructor, no?
Creas una propiedad para que almacene ese valor y se lo asignas dentro del constructor... Habría que probar :)

Saludos!


PD: Jajaja, me demoré 5 minutos en responder (me llamaron por fono) y ya te habían respondido casi lo mismo que yo, cuek XD
Gracias de hecho esto que acabas de mencionar fue mi primera opcion pero es un sistema grande donde se declara en decenas de archivos y en diferentes clases y seria algo muy tedioso cambiar
  #9 (permalink)  
Antiguo 28/11/2013, 13:51
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Una clase puede tomar variables globales?

Espero que os sirva asi lo realizo yo:

Código PHP:
Ver original
  1. class config
  2. {
  3.  
  4. // ejemplo de configuracion
  5.  
  6. protected $host = 'localhost';
  7.  
  8. protected $username= 'root';
  9.  
  10. protected $pass= '';
  11.  
  12. }
  13.  
  14.  
  15. // ahora extiendes la clase , donde se necesite
  16.  
  17. class load extends config
  18. {
  19.     public function get()
  20.     {
  21.         return $this->host;
  22.     }
  23. }

Última edición por webankenovi; 28/11/2013 a las 14:01
  #10 (permalink)  
Antiguo 20/12/2013, 16:15
 
Fecha de Ingreso: abril-2010
Ubicación: Cancun
Mensajes: 88
Antigüedad: 14 años
Puntos: 2
Respuesta: ¿Una clase puede tomar variables globales?

Cita:
Iniciado por webankenovi Ver Mensaje
Espero que os sirva asi lo realizo yo:

Código PHP:
Ver original
  1. class config
  2. {
  3.  
  4. // ejemplo de configuracion
  5.  
  6. protected $host = 'localhost';
  7.  
  8. protected $username= 'root';
  9.  
  10. protected $pass= '';
  11.  
  12. }
  13.  
  14.  
  15. // ahora extiendes la clase , donde se necesite
  16.  
  17. class load extends config
  18. {
  19.     public function get()
  20.     {
  21.         return $this->host;
  22.     }
  23. }
Muchas gracias pero la Mayoria de las clases ya tienen extends aunque a la padre se le puede poner igual, bueno eso creo
  #11 (permalink)  
Antiguo 20/12/2013, 16:58
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Una clase puede tomar variables globales?

Es que de acuerdo a tu estructura puedes ver varias posibilidades

Código PHP:
Ver original
  1. class config{
  2.     // ejemplo de configuracion
  3.     protected $host = 'localhost';
  4.  
  5.     protected $username= 'root';
  6.  
  7.     protected $pass= '';
  8. }
  9.  
  10. class padre extends config{
  11.     //
  12. }
  13.  
  14. class hijo1 extends padre{
  15.     //
  16. }
  17.  
  18. class hijo2 extends padre{
  19.     //
  20. }

Desde la clase hijo1 e hijo2 puedes acceder directamente a las propiedades de la clase config

En este caso

Código PHP:
Ver original
  1. class config{
  2.     // ejemplo de configuracion
  3.     protected $host = 'localhost';
  4.  
  5.     protected $username= 'root';
  6.  
  7.     protected $pass= '';
  8. }
  9.  
  10. require_once('config.php');
  11.  
  12. class padre extends otraclase{
  13.     protected $config;
  14.     public function __construct(){
  15.         $this->config = new config;
  16.     }
  17. }
  18.  
  19. class hijo1 extends padre{
  20.     //
  21. }
  22.  
  23. class hijo2 extends padre{
  24.     //
  25. }

Desde la clase hijo1 e hijo2 puedes acceder a las propiedades de la clase config a través de la propiedad protegida config

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.

Etiquetas: clases, globales, variables
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 19:15.