如何减少PHP代码?

maj*_*aja 4 php oop

我必须一次又一次地编写同一段代码,我想知道是否有更好的方法或快捷方式

我正在使用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))

有没有一种简单的方法来减少我必须编写的代码量?

Yan*_*ang 7

介绍

首先,你是在打破Liskov替代原则单一责任原则的同时,

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

LSP:

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

SRP:

既然你同时C担任3个职责,那肯定会打破Single Responsibility Principle.第一个是data container,第二个是做的事情,B第三个是做的事情C.

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

一个例子,你如何能够减少代码重复,在坚持了,SRP,LSPDI.

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'),你可能想阅读这篇文章