Внедрение объектов, которые расширяются от родительского класса в Slim

Я играю с фреймворком Slim PHP и наткнулся на ситуацию, которую не могу решить.

Сначала я объясню базовую настройку:

Используя slim-skeleton, у меня есть файл dependencies.php, в котором настроен DIC. Это стандартная установка Slim-Skeleton с двумя дополнительными вещами:

$container['db'] = function ($c) {
    return new PDO('mysql:host=localhost;dbname=****', '********', '********');
};

$container['model.user'] = function ($c) {
    $db = $c['db'];
    return new Dash\Models\User($db);
};

Итак, как видите, у меня есть две новые вещи, зарегистрированные в DIC: объект PDO и объект User.

Но передача объекта базы данных для каждой другой модели немного затруднительна... Я хотел бы иметь возможность внедрить объект PDO в родительский класс с именем Model.

Итак, модель должна выглядеть так:

class Model
{
    protected $db;

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

И модель пользователя:

class User extends Model
{
    public function getById($id)
    {
        $this->db->... // I have access to the database object (PDO) from the parent class.
    }
}

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

Любые идеи о том, как добиться наследования, используя контейнер Slim чистым и удобным способом?

Заранее спасибо.


person brslv    schedule 05.08.2016    source источник
comment
Для создания дочернего класса в вашем случае все равно потребуется конструктор базового класса. Наследование так не работает. Вы расширяете классы, а не уже созданные объекты.   -  person Royal Bg    schedule 05.08.2016


Ответы (1)


Наследование работает не так. User является экземпляром Model. Поэтому, когда вы сделаете new User($c['db']), все будет хорошо.

person Gareth Parker    schedule 05.08.2016
comment
А, ну, мне нужен перерыв. Вы совершенно правы. Спасибо! - person brslv; 05.08.2016