我必须一次又一次地编写相同的代码,我想知道是否有更好的方法或快捷方式
我使用的是php,我有3个课程:
class A{
private $data = array( .... );
protected function get($index){
return $data[$index];
}
}
class B extends A{
}
class C extends B{
public function doSth(){
echo A::get('index');
}
}
我想要做的是从祖父母班级获取数据。
没问题,除了我需要经常获取数据,并且php代码变得非常庞大(真正的类名很长,并且getter-Functionname非常长)
这就是我写的:
databaseCore::getDataByIndex('name')
在C中,我会使用这样的预处理器 -
#define DATA(x) databaseCore::getDataByIndex((x))
是否有一种简单的方法可以减少我必须编写的代码量?
答案 0 :(得分:7)
首先,您同时打破了Liskov Substitution Principle和Single-Responsibility Principle,
因此,你将一遍又一遍地面对类似的问题。
您的A
服务器是容器的用途,它可以简单地存储数据。然后你扩展这个,最终打破is-a
关系。这是因为容器不是hanlder。 has-a
是要走的路。您可以$handler
通过constructor
由于您C
同时担任3项职责,因此肯定会打破Single Responsibility Principle
。第一个是data container
,第二个是B
,第三个是C
。
这也称为deep inheritance
,这显然是一种不好的做法,直到它满足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')
,您可能需要{{3}}
答案 1 :(得分:0)
您可以将$data
更改为protected
并将其用作
$this->data['name'];