Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在实现接口或扩展抽象类时,您应该引用抽象/接口还是实现?_Php_Oop_Abstract Class_Interface Class - Fatal编程技术网

Php 在实现接口或扩展抽象类时,您应该引用抽象/接口还是实现?

Php 在实现接口或扩展抽象类时,您应该引用抽象/接口还是实现?,php,oop,abstract-class,interface-class,Php,Oop,Abstract Class,Interface Class,我有一个包含数据库方法的抽象类:abstractDatabase 我用:Database 当在另一个类中引用这个时,我应该使用abstractDatabase还是Database class Config { public function setDatabase(\abstractDatabase $database) { $this->db=$database; return $this } 或者应该写为: class Config {

我有一个包含数据库方法的抽象类:
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);
}


实现接口也有同样的问题。

如果可能的话,您应该依赖抽象,而不是具体化

这是的“D”,即

这允许系统松散耦合,并且能够交换参与的模块或类,只要它们遵循相应的抽象或接口


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

人们可能会投反对票,因为这个问题没有“明确”的解决方案,这是基于观点的,因此是离题的。你想怎么做就怎么做。我已经看到这两种方法都在项目中使用。用你觉得最舒服的方式来做。谢谢@LLJ97我不确定这是否是一个偏好,或者使用其中一个是否会有问题。谢谢@yivi更关心的是类中的类型暗示应该指示接口/摘要还是最终类,所以当使用类型暗示时,我应该使用\interfaceFunc还是\Func(对于抽象类也是如此)。我知道。这就是我的回答。你应该依赖抽象/接口;我的意思是你应该给那些暗示;因为类型暗示是声明这些依赖项的方式。
abstract class Database
{
    abstract function __construct(\Config $config);
}