Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/06/2012, 09:37
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Desaconsejado el uso de variables globales?

Así es, es totalmente correcto lo que dices.

Pues la forma es instanciando la clase donde necesites, hay muchas formas, la forma más correcta es la inyección de dependencias, es un patrón de desarrollo de Software para POO, que te permite en lugar de hardcodear la dependencia en la clase, inyectarla desde fuera de la clase para que sea usada, por ejemplo:

// no recomendado
Código PHP:
Ver original
  1. class User {
  2.      private $db;
  3.  
  4.      public function __construct() {
  5.              $this->db = new DB(/* Datos *); // hardcoded
  6.              $this->db = Registry::get('db'); // vía registro (no recomendado tampoco)
  7.      }
  8. }
  9.  
  10. $user = new User();
  11. $user->algo();

// recomendado
Código PHP:
Ver original
  1. class User {
  2.        private $db;
  3.  
  4.        public function setDb(DBInterface $db) { $this->db = $db; }
  5.        public function getDb() { return $this->db; }
  6. }
  7.  
  8. // en otro file donde hagas el setup
  9. $db = new Db(/* datos */);
  10. $user = new User();
  11. $user->setDb($db);
  12.  
  13. // Donde uses $user
  14. $user->algo();

Todo eso se puede automatizar usando un Dependency Container que te permite "auto conectar" los objetos dependiendo de un registro de dependencias, es la forma más correcta actualmente para manejar las dependencias en Software.

Saludos.