我必须一次又一次地编写同一段代码,我想知道是否有更好的方法或快捷方式
我正在使用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');
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是从祖父母班级获取数据.
没问题,除了我需要经常获取数据,并且php代码变得极其庞大(真正的类名很长,并且getter-Functionname非常长)
这就是我写的:
databaseCore::getDataByIndex('name')
Run Code Online (Sandbox Code Playgroud)
在CI中将使用这样的预处理器-makro:
#define DATA(x) databaseCore::getDataByIndex((x))
有没有一种简单的方法来减少我必须编写的代码量?
首先,你是在打破Liskov替代原则和单一责任原则的同时,
因此,你将一遍又一遍地面对类似的问题.
您的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);
Run Code Online (Sandbox Code Playgroud)
那么,你会在这里获得什么?重用能力,从而减少代码重复.
既然你也这样做了DBcore::get('foo'),你可能想阅读这篇文章