[英]How to reduce PHP-Code?
我必须一次又一次地编写同一段代码,我想知道是否有更好的方法或快捷方式
我正在使用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')
在CI中将使用这样的预处理器-makro:
#define DATA(x) databaseCore::getDataByIndex((x))
有没有一种简单的方法来减少我必须编写的代码量?
首先,你是在打破Liskov替代原则和单一责任原则的同时,
因此,你将一遍又一遍地面对类似的问题。
您的A
服务器是容器的用途,它可以简单地存储数据。 然后你扩展这个,最终破坏is-a
关系。 这是因为容器不是hanlder。 has-a
是要走的路。 您可以通过constructor
$handler
将容器注入该$handler
由于您的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')
,你可能想阅读这篇文章
您可以将$data
更改$data
protected
并使用它,就像
$this->data['name'];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.