Понимание наследования PHP - PullRequest
0 голосов
/ 27 апреля 2011

Я понимаю основные принципы наследования в ООП, но у меня есть конкретная вещь, которую я пытаюсь сделать, и мне нужен совет о том, как лучше это сделать.

Допустим, у меня есть основной класс:

class Core {
    ....
}

и у меня также есть 2 или более других классов, которые расширяют эту функциональность

class MyClass1 extends Core {
    ....
}
class MyClass2 extends Core {
    ....
}

, и у меня также есть класс базы данных, в котором я выполняю свои запросы, я хочу передать инстанцированный объекткласса базы данных (возможно, по ссылке) для каждого из моих классов.Одной из причин этого может быть сохранение списка или количества запросов на этой странице как выполненных.

Как / можно мне это сделать?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

Вы можете передать свой экземпляр объекта базы данных конструктору для ваших классов:

class Core
    protected $db;

    public function __construct(Your_Db_Class $database) {
        $this->db = $database;
    }

}

И затем, используя ваши методы, работайте с $this->db, чтобы получить доступ к вашей базе данных.


Конечно, при создании экземпляров ваших классов вам нужно будет указать объект базы данных:

// somewhere, instanciate your DB class
$db = new Your_Db_Class();

// And, then, when instanciating your objects :
$obj = new MyClass1($db);


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

Возможно, немного проще в настройке; но менее легко для юнит-теста, после.

0 голосов
/ 27 апреля 2011

Вы можете передать объект базы данных в качестве параметра функции __construct вашего класса, а затем в указанной функции назначить объект db члену класса, например, $ this-> database_handler.

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

Еще одно примечание: по умолчанию все объекты передаются по ссылке, поэтому вы не должныне нужно беспокоиться об этом.

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