API-Package 用于简化从对象的数据块中访问,无需实现getter和setter。

1.1.0 2018-02-28 10:02 UTC

This package is auto-updated.

Last update: 2024-09-12 05:56:48 UTC


README

Minimum PHP Version Latest Stable Version composer.lock License

Build Status Code Climate StyleCI Test Coverage BCH compliance Latest Unstable Version

特性

  • 简化数据存储对象的使用。
  • 通过最小化LOC来提高源代码的可读性。
  • 使用一个小型包标准化DAO层,无需大型框架。

安装

安装时需要Composer v。

composer require phoenixrvd/oda

基础

假设需要一个具有两个确切数据字段(foo和bar)的对象。

声明标准方法时,对象将如下所示

<?php

class MyDataObject {

    private $data = [];
    
    public function getFoo(){
        return $this->data['foo'];
    }
    
    public function setFoo($value){
        $this->data['foo'] = $value;
        return $this;
    }
    
    public function hasFoo(){
        return isset($this->data['foo']);
    }
    
    public function isFoo($value){
        return $this->hasFoo() && $this->data['foo'] === $value;
    }
    
    public function getBar(){
        return $this->data['bar'];
    }
    
    public function setBar($value){
        $this->data['bar'] = $value;
        return $this;
    }
    
    public function hasBar(){
        return isset($this->data['bar']);
    }
    
    public function isBar($value){
        return $this->hasBar() && $this->data['bar'] === $value;
    }

}

如果有10个属性而不是2个,对象长度将增加约300LOC。

使用此包可以以更紧凑的方式获得相同的功能。即使数据字段数量增加,也不会增加代码基础。

下面的示例中重写了先前对象

<?php

use PhoenixRVD\ODA\Interfaces\OdaObject;
use PhoenixRVD\ODA\Traits\DataAccessors;
use PhoenixRVD\ODA\Traits\ValueObject;

class MyDataObject implements OdaObject {

    use ValueObject, DataAccessors;

}

IDE-助手

为了使IDE了解所有对象方法并能够使用自动完成,应在类签名中指定方法。

但仍然比以前更紧凑。

<?php 

/**
 * @method $this  setFoo(mixed $value)
 * @method string getFoo()
 * @method bool   isFoo(mixed $value)
 * @method bool   hasFoo()
 *
 * @method $this  setBar(mixed $value)
 * @method string getBar()
 * @method bool   isBar(mixed $value)
 * @method bool   hasBar()
 */

标准工具

标准前缀

自定义工具

有时需要格式化返回对象中的某些字段。

例如,$this->data['created_at'] 是Unix时间戳,但需要将其作为RFC822日期。

示例 中描述了如何向API学习 date - Accessor。这将自动将Unix时间戳转换为日期,并可以使用 $this->dateCreatedAt() 在任何地方使用。

示例

  1. 创建访问器类
<?php 

use PhoenixRVD\ODA\Methods\AbstractMethod;
use PhoenixRVD\ODA\Interfaces\OdaObject;

class DateRFC822 extends AbstractMethod {

    public function execute(OdaObject $object, array $attributes = array()) {
        $data = $object->getData();

        return date(DATE_RFC822, $data[ $this->propertyName ]);
    }
}
  1. 创建可重用性特质
<?php

use PhoenixRVD\ODA\MethodFactory;

trait MyObjectDecorator {

   public function __call($name, $arguments) {
       return (MethodFactory::getInstance())
           ->setAccessor(new DateRFC822) // Eigenes Accessor bei der Factory registrieren
           ->makeMethod($name)
           ->execute($this, $arguments);
   }

}
  1. 在对象中而不是在标准特质中使用自定义特质。
<?php

use PhoenixRVD\ODA\Interfaces\OdaObject;
use PhoenixRVD\ODA\Traits\ValueObject;

class MyDataObject implements OdaObject {

    use ValueObject, MyObjectDecorator;

}
  1. 简单调用方法
<?php

// Ausgabe: Tue, 11 Apr 2017 21:22:14 +0000
echo (new MyDataObject())->setCreatedAt(1491945734)->dateCreatedAt(); 

注意

针对性能要求极高的项目,应避免使用此方法。有关此问题的讨论可在此处找到 here

测试

composer oda:test

版权和许可

代码在 MIT许可 下发布。