为什么实现接口的类不是该接口的实例?

时间:2018-07-11 11:04:31

标签: php dependency-injection

我想这样进行依赖注入

(typeof parameter=== 'function')

所以我已经创建了Database类和一个接口

<?php
    class UserModel
    {
        public function __construct(DatabaseInterface $db)
        {
            $this->db = $db;
        }
    }

但是当我尝试使UserModel实例传递PdoConnection实例时,出现错误

<?php
    interface DatabaseInterface {}

    class PdoConnection implements DatabaseInterface
    {
        ...

我不确定为什么PdoConnection实现了DatabaseInterface,所以我相信UserModel应该接受它?

在下面调试

$user = new UserModel(new \Manager\Database\PdoConnection);

__construct() must be an instance of DatabaseInterface, instance of Manager\Database\PdoConnection given

结果

$class = new \Manager\Database\PdoConnection();
if ($class instanceof DatabaseInterface) {
    echo "variable class is a instance of DatabaseInterface";
} else {
    echo "variable class is not a instance of DatabaseInterface";
}

var_dump(class_implements($class));

1 个答案:

答案 0 :(得分:1)

您需要在各处编写Manager\Database\DatabaseInterface而不是简单地写DatabaseInterface