介绍
因此,你将一遍又一遍地面对类似的问题.
LSP:
您的A服务器是容器的用途,它可以简单地存储数据.然后你扩展这个,最终破坏是一种关系.这是因为容器不是hanlder. has-a是要走的路.你可以通过构造函数inject a container到那个$handler
SRP:
由于您的C同时承担3项职责,因此它肯定违反了单一责任原则.第一个是数据容器,第二个是做B的东西,第三个是做C的东西.
这也称为深度继承,这显然是一种不好的做法,直到它满足SRP和LSP.
一个例子,说明如何在遵守SRP,LSP和DI的同时减少代码重复.
class Container
{
protected $container = array();
public function setName($name)
{
$this->container['name'] = $name;
}
public function getName()
{
return $this->container['name'];
}
public function setAge($age)
{
$this->container['age'] = $age;
}
public function getAge()
{
return $this->container['age'];
}
}
class Handler
{
protected $pdo;
public function __construct($pdo)
{
$this->pdo = $pdo;
}
public function fetchSomething(Container $container)
{
$query = "SELECT * FROM `table` WHERE `name` =:name AND `age` =:age";
$stmt = $this->pdo->prepare($query);
$stmt->execute(array(
':name' => $container->getName(),
':age' => $container->getAge()
));
return $stmt->fetch();
}
}
$container = new Container();
$container->setName($_POST['name']);
$container->setAge($_POST['age']);
$handler = new Handler($pdo);
$stuff = $handler->fetchSomething($container);
print_r($stuff);
那么,你会在这里获得什么?重用能力,从而减少代码重复.
既然你也做DBcore :: get(‘foo’),你可能想要read this article