我有这段代码:
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);
但我不知道如何让它发挥作用。
有人能给我一只手=)
谢谢!
答案 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();