【发布时间】:2016-08-05 11:10:56
【问题描述】:
我正在使用 Slim PHP 框架并偶然发现了一个我无法解决的情况。
首先,我将解释基本设置:
使用slim-skeleton,我有一个dependencies.php 文件,其中设置了DIC。这是默认的超薄骨架设置,还有两件事:
$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 的容器来实现继承的任何想法?
提前致谢。
【问题讨论】:
-
在您的情况下实例化子类仍然需要基类的构造函数。继承不能以这种方式工作。您确实扩展了类,而不是已经创建的对象。
标签: php dependency-injection slim