if (! self::connected) {
является , вероятно, причиной вашей ошибки. Вы используете self только тогда, когда пытаетесь получить доступ к статическим членам класса (который не подключен), и вы должны использовать $ -Sign в начале, в противном случае вы запрашиваете константу класса. Поэтому вы должны либо объявить подключенный как статический, либо использовать $ this-> для доступа к нему.
Взгляните на статических членов класса в руководстве по PHP!
Кроме того, вы должны действительно попытаться понять, как работает ООП, прежде чем писать такой код. PHP говорит, что вы не можете использовать $ this, потому что вы не находитесь в контексте объекта , что означает, что вы никогда не создавали экземпляр объекта, используя new .
Может быть, Основы PHP ООП помогут вам.
К сожалению, PHP позволяет вам вызывать методы статически, которые на самом деле не являются, что может быть причиной ошибки здесь. Но рано или поздно (вероятно, рано) вам все равно придется разбираться в основах ООП, поэтому поиграйтесь с несколькими простыми классами, прежде чем пытаться писать код для продуктивного использования.
Также взгляните на этот пример реализации шаблона Singleton .
Если вам нужна дополнительная помощь по этому вопросу, пожалуйста, покажите нам, как вы вызываете метод connect!
Там у нас есть ваша проблема. Вы делаете следующее:
self::mongo_connect($db_name);
Что означает "статически вызывать mongo_connect для себя".
Что вам действительно нужно сделать, это:
self::$instance->mongo_connect();
Что эквивалентно «вызову mongo_connect для единственного экземпляра self».
Но, пожалуйста, присмотритесь к базовому учебнику по PHP, потому что то, что вы делаете в своем коде, в основном неверно ...
$this->$instance = new $c;
Неправильно во многих отношениях ... Не только потому, что вы используете $ this в статическом контексте, но и потому, что вы назначаете созданный экземпляр члену класса с именем, которое * содержится в $ экземпляр, который кажется пустым ... Понятия не имею, как это на самом деле может работать ...