phoenixrvd / oda
API-Package 用于简化从对象的数据块中访问,无需实现getter和setter。
1.1.0
2018-02-28 10:02 UTC
Requires
- php: >=5.6
Requires (Dev)
- ext-xdebug: *
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: ^4.8|^6.1
This package is auto-updated.
Last update: 2024-09-12 05:56:48 UTC
README
特性
- 简化数据存储对象的使用。
- 通过最小化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()
在任何地方使用。
示例
- 创建访问器类
<?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 ]); } }
- 创建可重用性特质
<?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); } }
- 在对象中而不是在标准特质中使用自定义特质。
<?php use PhoenixRVD\ODA\Interfaces\OdaObject; use PhoenixRVD\ODA\Traits\ValueObject; class MyDataObject implements OdaObject { use ValueObject, MyObjectDecorator; }
- 简单调用方法
<?php // Ausgabe: Tue, 11 Apr 2017 21:22:14 +0000 echo (new MyDataObject())->setCreatedAt(1491945734)->dateCreatedAt();
注意
针对性能要求极高的项目,应避免使用此方法。有关此问题的讨论可在此处找到 here。
测试
composer oda:test
版权和许可
代码在 MIT许可 下发布。