加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何减少PHP代码?

发布时间:2020-12-13 17:45:26 所属栏目:PHP教程 来源:网络整理
导读:我必须一次又一次地编写同一段代码,我想知道是否有更好的方法或快捷方式 我正在使用php,我有3个类: class A{ private $data = array( .... ); protected function get($index){ return $data[$index]; }}class B extends A{}class C extends B{ public func
我必须一次又一次地编写同一段代码,我想知道是否有更好的方法或快捷方式

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

在C中我会使用这样的预处理器-makro:

#define DATA(x)databaseCore :: getDataByIndex((x))

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

解决方法

介绍

首先,你同时打破Liskov Substitution Principle和Single-Responsibility Principle,

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

LSP:

您的A服务器是容器的用途,它可以简单地存储数据.然后你扩展这个,最终破坏是一种关系.这是因为容器不是hanlder. has-a是要走的路.你可以通过构造函数inject a container到那个$handler

SRP:

由于您的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读