2010-05-08 5 views
1

j'ai ce code:comment rendre les objets globalement accessibles?

class IC_Core { 

    /** 
    * Database 
    * @var IC_Database 
    */ 
    public static $db = NULL; 

    /** 
    * Core 
    * @var IC_Core 
    */ 
    protected static $_instance = NULL; 

    private function __construct() { 

    } 

    public static function getInstance() { 
     if (! is_object(self::$_instance)) { 
      self::$_instance = new self(); 
      self::initialize(self::$_instance); 
     } 
     return self::$_instance; 
    } 

    private static function initialize(IC_Core $IC_Core) { 
     self::$db = new IC_Database($IC_Core); 
    } 

} 

mais quand je veux l'accès IC_Database avec:

$IC = IC_Core::getInstance(); 
$IC->db->add() // it says that its not an object. 

je pense que le problème réside dans l'auto :: $ db = new IC_Database (IC_Core $);

mais je ne sais pas comment le faire fonctionner.

Quelqu'un pourrait-il me donner un coup de main =)

merci!

Répondre

2

Semble à moi initialize devrait être une méthode d'instance plutôt que statique. Ensuite, la base de données doit être définie en utilisant $this->db plutôt que self::$db.

public static function getInstance() { 
     if (! is_object(self::$_instance)) { 
      self::$_instance = new self(); 
      self::$_instance->initialize(); 
     } 
     return self::$_instance; 
    } 

    private function initialize() { 
     $this->db = new IC_Database($this); 
    } 

Vous pouvez même mettre le contenu de la méthode initialize dans le constructeur-De cette façon, vous ne serez pas à vous soucier de l'appeler.

+0

merci cela a fonctionné! –

+0

Il semble y avoir peu de raison d'avoir un '$ _instance' statique avec un' $ db 'non statique. – Tgr

+0

@Tgr: le '$ db' est local à l'instance, mais il n'y en a qu'un seul. Cela fonctionne de la même manière. –

1

La propriété $ db est déclarée static, vous devez donc y accéder avec le double-deux-points. la notation en forme de flèche est réservée aux propriétés non statiques.

$IC = IC_Core::getInstance(); 
IC_Core::$db->add(); 
Questions connexes