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);
}