注入对象,在 Slim 中从父 class 扩展

Injecting objects, which extends from a parent class in 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 对象注入父对象 class,称为 型号.

所以模型应该是这样的:

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 的容器 returns User 的新实例并且没有实例化父对象 型号 class.

关于如何以干净可用的方式使用 Slim 的容器实现继承的任何想法?

提前致谢。

这不是继承的工作方式。 User Model 的一个实例。因此,当您执行 new User($c['db']) 时,它会正常工作。