我有一个包含我的数据库方法的抽象类: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);
}
有关实现接口的问题。
答案 0 :(得分:0)
如果可能的话,您应该依赖于抽象而不是依赖于混凝土。
这是SOLID principles的“ D”,即Dependency Inversion Principle。
这使您的系统可以松散地耦合,并能够交换参与的模块或类,只要它们遵循相应的抽象或接口即可。
作为代码后的真实示例,您可以有多个ConfigInterface
实现类,这些类从不同的存储库和/或格式中读取配置,从而可以根据应用程序的需要将一个类交换为另一个类。