我必须一次又一次地编写相同的代码,我想知道是否有更好的方法或捷径
我正在使用 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');
}
}
我想做的是从祖 parent 类中获取数据。
没问题,除了我需要经常获取数据,而且 php 代码变得非常庞大(真正的类名很长,getter 函数名很长)
这就是我正在写的内容:
databaseCore::getDataByIndex('name')
在 C 中,我会像这样使用预处理器宏:
#define DATA(x) databaseCore::getDataByIndex((x))
有没有一种简单的方法可以减少我必须编写的代码量?
最佳答案
简介
首先,你打破了Liskov Substitution Principle和 Single-Responsibility Principle同时,
因此,您将一遍又一遍地面对类似的问题。
语言服务提供商:
您的A
服务器是容器的用途,即简单地存储数据。然后你扩展这个,并最终打破 is-a
关系。这是因为容器不是处理程序。 has-a
是要走的路。你可以inject a container通过 constructor
$handler
建议零售价:
因为你的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
关于php - 如何减少 PHP 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034703/