Как использовать класс базы данных в методах других классов?

Есть класс Database для работы с базой данных. Еще есть класс Session для работы с сессиями. В классе сессии есть запросы к базе данных, а сами запросы проделываются благодаря классу Database. Как сделать видимым класс Database в методах класса Session?

Ничего кроме как использовать $GLOBALS в конструкторе я не придумал. Подскажите, как вообще это реализовать?

$Database = new Database;

$Session = new Session;


А от собственно что я использую в конструкторе класса Session:
private Database;

public function __construct()
{
$this->Database = isset($GLOBALS['Database']) ? $GLOBALS['Database'] : new Database;
}


Оно то работает, но приемлемо ли такое решение?
  • Вопрос задан
  • 338 просмотров
Пригласить эксперта
Ответы на вопрос 2
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Боюсь даже спрашивать, почему вы решили, что $GLOBALS лучше, чем передача параметра в конструктор.
Срочно читайте весь www.phptherightway.com
В частности по теме: www.phptherightway.com/#dependency_injection
Ну и можете посмотреть что-то такое, например: php-di.org/doc/understanding-di.html
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега PHP
class Session 
{
    private $Database;

    public function __construct(DatabaseInterface $Database)
    {
        $this->Database = $Database;
    }
}



interface DatabaseInterface {}



class Database implements DatabaseInterface {}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы