如何使对象全局访问?

时间:2010-05-08 18:09:34

标签: php design-patterns oop singleton

我有这段代码:

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

}

但是当我想用:

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

我认为问题出在self :: $ db = new IC_Database($ IC_Core);

但我不知道如何让它发挥作用。

有人能给我一只手=)

谢谢!

2 个答案:

答案 0 :(得分:2)

对我而言initialize应该是一个实例方法而不是静态方法。然后,应使用$this->db而非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);
    }

你甚至可以将initialize方法的内容放在构造函数中 - 这样你就不用担心调用它了。

答案 1 :(得分:1)

$ db属性声明为static,因此您必须使用双冒号访问它。箭头符号仅适用于非静态属性。

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