繁体   English   中英

如何减少PHP代码?

[英]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替代原则单一责任原则的同时,

因此,你将一遍又一遍地面对类似的问题。

LSP:

您的A服务器是容器的用途,它可以简单地存储数据。 然后你扩展这个,最终破坏is-a关系。 这是因为容器不是hanlder。 has-a是要走的路。 您可以通过constructor $handler 将容器注入$handler

SRP:

由于您的C同时承担3项职责,因此它肯定违反了Single Responsibility Principle 第一个是data container ,第二个是做B东西,第三个是做C东西。

这也称为deep inheritance ,这显然是一种不好的做法,直到它满足SRPLSP

一个例子,说明如何在遵守SRPLSPDI同时减少代码重复。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM