【问题标题】:Injecting objects, which extends from a parent class in Slim注入对象,从 Slim 中的父类扩展
【发布时间】: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


【解决方案1】:

继承不是这样工作的。 User Model 的一个实例。所以当你使用new User($c['db']) 时,它会正常工作。

【讨论】:

  • 啊,好吧,我需要休息一下。你完全正确。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-01-22
  • 2014-01-31
  • 2011-06-29
  • 1970-01-01
  • 2016-07-19
  • 2019-07-04
  • 2016-06-22
  • 2014-06-05
相关资源
最近更新 更多