Foros del Web » Programando para Internet » PHP »

'global' en métodos de clases

Estas en el tema de 'global' en métodos de clases en el foro de PHP en Foros del Web. Buenas, mi pregunta es esa, según he leído no es buena practica el uso de global en los métodos de las clases, ¿cómo puedo hacer ...
  #1 (permalink)  
Antiguo 25/02/2011, 06:26
Avatar de Pedro_valencia  
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 82
Antigüedad: 17 años
Puntos: 6
'global' en métodos de clases

Buenas, mi pregunta es esa, según he leído no es buena practica el uso de global en los métodos de las clases, ¿cómo puedo hacer lo mismo pero evitando usarlo?

Es decir, tengo un método que utiliza la base de datos y la clase ya extá extendida con otra clase (no es la de la base de datos) entonces hice uso de global para que la clase de la base de datos funcionara en mi método:

Código PHP:

$db 
= new db();

clase A extends clase B {

     function 
getX () {
        global 
$db;

         
// código de la función;
     
}


Como leo que es una mala práctica, ¿qué hago?, sed concretos con la respuesta por favor.

Un saludo y muchas gracias!
__________________
Si te ha servido mi post, ¡dame Karma, es gratis!

- ¿Qué es el éxito? Lo diferente.
  #2 (permalink)  
Antiguo 25/02/2011, 06:43
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 2 meses
Puntos: 334
Respuesta: 'global' en métodos de clases

puedes instanciar db dentro de la class, pasar el objeto como parametro ... etc

Código PHP:
Ver original
  1. clase A extends clase B {
  2.      function getX () {
  3.         $db = new db();
  4.          // código de la función;
  5.      }
  6. }

Código PHP:
Ver original
  1. $db = new db();
  2. clase A extends clase B {
  3.      function getX ($db) {
  4.          // código de la función;
  5.      }
  6. }

saludos.
  #3 (permalink)  
Antiguo 25/02/2011, 07:18
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 7 meses
Puntos: 394
Respuesta: 'global' en métodos de clases

O.o que bien, yo tambien utilizo dos clases una tiene los parametros de conexion para la base de datos y la otra tiene los querys que se le pueden hacer a una tabla... entonces necesito heredar la conexion para que realice los querys.... yo lo que hago es declarar en el constructor del hijo el constructor del padre y me funciona bien, aunque no se si sea buena practica....

Código PHP:

function __construct(){

      
parent::__construct // aca hay una variable que se llama $conexion que tiene el id de conexion

}

function 
NombreFuncion(){

...
codigo aqui

$ejecutar 
mysql_query($consulta$this->conexion);

mas codigo aqui...


__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #4 (permalink)  
Antiguo 25/02/2011, 09:33
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 15 años, 2 meses
Puntos: 17
Busqueda Respuesta: 'global' en métodos de clases

La implementación de dependencia puede ser de varias formas, aqui te dejo otras dos aparte de la que te pasaron
Código PHP:
Ver original
  1. class A{
  2.     private $db;
  3.     public function setDb($db){
  4.         $this->db = $db;
  5.     }
  6.    
  7.     function getX () {
  8.         $db->doSomething();
  9.          // código de la función;
  10.     }
  11. }
  12.  
  13. class B{
  14.     private $db;
  15.    
  16.     function  __construct($db) {
  17.         $this->db;
  18.     }
  19.    
  20.     function getX () {
  21.         $db->doSomething();
  22.          // código de la función;
  23.     }
  24. }
  25.  
  26. $db = new db();
  27.  
  28. $a = new A();
  29. $b = new B($db);
  30. $a->setDb($db);
__________________
Saludos.
  #5 (permalink)  
Antiguo 25/02/2011, 09:37
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: 'global' en métodos de clases

Cita:
Iniciado por jotaincubus Ver Mensaje
O.o que bien, yo tambien utilizo dos clases una tiene los parametros de conexion para la base de datos y la otra tiene los querys que se le pueden hacer a una tabla... entonces necesito heredar la conexion para que realice los querys.... yo lo que hago es declarar en el constructor del hijo el constructor del padre y me funciona bien, aunque no se si sea buena practica....

Código PHP:

function __construct(){

      
parent::__construct // aca hay una variable que se llama $conexion que tiene el id de conexion

}

function 
NombreFuncion(){

...
codigo aqui

$ejecutar 
mysql_query($consulta$this->conexion);

mas codigo aqui...


Mejor pásalo como parámetro, ya que si necesitas conectar a otra base de datos necesitas cambiar el padre para que el hijo haga uso de los datos en el constructor
__________________
Saludos.
  #6 (permalink)  
Antiguo 25/02/2011, 09:40
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 7 meses
Puntos: 394
Respuesta: 'global' en métodos de clases

Cita:
Iniciado por JaimeSavines Ver Mensaje
Mejor pásalo como parámetro, ya que si necesitas conectar a otra base de datos necesitas cambiar el padre para que el hijo haga uso de los datos en el constructor
O.o no habia pensado en eso... gracias por el dato
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #7 (permalink)  
Antiguo 25/02/2011, 09:50
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 5 meses
Puntos: 416
Respuesta: 'global' en métodos de clases

Talvez podrias hacer los metodos de la clase db para que sean estaticos y poder llamarlos sin necesidad de hacer una instancia de la clase y/o pasarla por parametros.
  #8 (permalink)  
Antiguo 25/02/2011, 13:48
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: 'global' en métodos de clases

Cita:
Iniciado por Ronruby Ver Mensaje
Talvez podrias hacer los metodos de la clase db para que sean estaticos y poder llamarlos sin necesidad de hacer una instancia de la clase y/o pasarla por parametros.
También puede ser una buena idea, siempre que el modelo lo requiera por que es muy común que se abuse en el uso de las mismas.
__________________
Saludos.
  #9 (permalink)  
Antiguo 25/02/2011, 15:05
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 10 meses
Puntos: 155
Respuesta: 'global' en métodos de clases

segun yo el paso de una clase a otra como bien dicen puede ser heredando , pero igual si se quiere utilizar el paso de parametro , deberia ser un paso de parametro por referencia

Código PHP:

$b 
= new B(&$db);#notese el inche ampersand 
asi dentro de la clase usas distintos objetos , no solo de la base de datos
  #10 (permalink)  
Antiguo 25/02/2011, 17:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: 'global' en métodos de clases

@mogurbon

Ya no es necesario usar el &, ya a partir de PHP5 todos los objetos se pasan por referencia.

Saludos.

Etiquetas: clases, global
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 06:54.