nesneler küresel erişilebilir hale nasıl?

2 Cevap php

ben bu kodu vardır:

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);
    }

}

ama erişim IC_Database ile İstediğim zaman:

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

i sorun self :: $ db = new IC_Database ($ IC_Core) yatıyor düşünüyorum;

ama o iş yapmak için nasıl bilmiyorum.

Birisi) = bana bir el verebilir

teşekkürler!

2 Cevap

Bana öyle geliyor initialize bir örnek yöntemi yerine statik bir olmalıdır. Daha sonra, DB $this->db yerine self::$db ile ayarlanmalıdır.

    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);
    }

Hatta yapıcı-bu şekilde initialize yöntemin içeriğini koyabilirsiniz, bunu arama konusunda endişelenmenize gerek olmayacaktır.

$ db özelliği static böylece çift kolon ile erişmek gerekir ilan edilir. ok gösterimi sadece non-statik özellikleri içindir.

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