在实现接口或扩展抽象类时,应引用抽象/接口或实现吗?

时间:2020-04-17 14:21:07

标签: php oop abstract-class interface-class

我有一个包含我的数据库方法的抽象类:abstractDatabase

我通过以下课程扩展了该课程:Database

在其他班级中提及此问题时,我应该使用abstractDatabase还是Database

class Config
{
    public function setDatabase(\abstractDatabase $database) {
        $this->db=$database;
        return $this
}

或者应该写为:

class Config
{
    public function setDatabase(\Database $database) {
        $this->db = $database;
        return $this;
}

另外,在定义抽象类时,我应该引用abstractClass还是仅引用Class

abstract class Database
{
    abstract function __construct(\abstractConfig $config);
}

abstract class Database
{
    abstract function __construct(\Config $config);
}

有关实现接口的问题。

1 个答案:

答案 0 :(得分:0)

如果可能的话,您应该依赖于抽象而不是依赖于混凝土。

这是SOLID principles的“ D”,即Dependency Inversion Principle

这使您的系统可以松散地耦合,并能够交换参与的模块或类,只要它们遵循相应的抽象或接口即可。

作为代码后的真实示例,您可以有多个ConfigInterface实现类,这些类从不同的存储库和/或格式中读取配置,从而可以根据应用程序的需要将一个类交换为另一个类。