PHP ООП синглтон не возвращает объект - PullRequest
1 голос
/ 28 ноября 2010

Странные неприятности.Я использовал синглтон несколько раз, но этот конкретный случай просто не хочет работать.Дамп говорит, что экземпляр является нулевымлюбые ошибки в моем редакторе.Спасибо за быстрые ответы, как всегда.

Ответы [ 3 ]

9 голосов
/ 28 ноября 2010

Вам необходимо всегда возвращать объект singleton из метода singleton, в данном случае это не так, потому что у вас есть оператор else, поэтому первый вызов getInstance ничего не даст:

static function getInstance()
{       
    if(!self::$instance) {
        self::$instance = new Core();
    } else {
        return self::$instance;
    }
}

Ваш одноэлементный метод должен выглядеть следующим образом:

static function getInstance()
{       
    if(!self::$instance) {
        self::$instance = new Core();
    }
    return self::$instance;
}

Кроме того, наличие переменной экземпляра, обозначающей, был ли создан объект, в значительной степени бесполезно, поскольку вы можете просто сравнить if(self::$instance !== NULL) и все готово.

2 голосов
/ 28 ноября 2010

getInstance должен всегда возвращать значение - необходимо изменить следующим образом:

static function getInstance()
{       
    if(!self::$instance) {
        self::$instance = new Core();
    }
    return self::$instance;
}
0 голосов
/ 02 декабря 2010

В дополнение к необходимости изменить ваш метод getInstance () на:

static function getInstance() {       
    if(!self::$instance) {
        self::$instance = new Core();
    }
    return self::$instance;
}

... вы также пытаетесь разыменовать $ instance от самого экземпляра в следующем вызове:

var_dump($core->instance);

Вы должны либо проверять:

var_dump($core);

или

var_dump(Core::$instance);

... который после вызова $ core = Core :: getInstance () должен быть тем же объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...