adaddinsane / dataobject
具有排序、过滤和合并的数据对象存储和恢复
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2024-10-02 19:08:09 UTC
README
此包提供了两个可扩展的类,通过各种默认和自定义方法访问数据数组的元素。
为什么要这样做?主要原因是简单地传递数组无法验证正在传递的内容,但将数组作为对象可以提供类型提示,从而提供更好的正确代码的确定性。
所有类都是抽象的(在以下示例中忽略),必须扩展才能使用。
选项
一个类允许写入数据,而另一个提供不可变对象,该对象没有 set()
方法。
$data = [ 'a' => 'A', 'b' => 'B' ]; $object = new DataObject($data); $a = $object->get('a'); $b = $object->get('b', 'z'); // Default value 'z', if 'b' key is not set. $data->set('b', 'q'); $immutable = new ImmutableDataObject($data); $immutable->set('b', 'q'); // Method not permitted.
此包可与ParamVerify包一起使用,该包可以在创建数据对象之前检查数组的内容。
如何使用
您可以直接使用这些类,但这不是最佳方式。
假设您以数组的形式从API获取数据,我们将其称为personData。要使用DataObject,您将创建一个新的类
class PersonData extends \Adaddinsane\DataObject\ImmutableDataObject { public function getFullName(): string { return $this->get('given_name') . ' ' . $this->get('family_name'); } }
您可以创建方法来提取所需的数据。
如果API数据结构发生变化,只需更改类以匹配。如果您在多个地方使用 getFullName()
,只需更改一次。
现在您可以在参数中使用类型提示来确保您传递了正确的项目。
function analyse(PersonData $person) { ... }
GenericBag
这是一个第三抽象对象,它扩展了DataObject,允许添加的项被验证为特定类类型或类型。
验证函数也可以被覆盖,如果存储的不是类。
Bag的目的在于,您可以拥有一个可以一起传递的项集合,并且可以类型提示以确保传递了正确的项。
合并
在您的GenericBag类中,实现 GenericBagMergeInterface
类和 trait GenericBagMergeTrait;
,然后您可以访问一个merge()方法,该方法接受另一个GenericBag对象作为参数。
过滤
在您的GenericBag类中,实现 GenericBagFilterInterface
类和 trait GenericBagFilterTrait;
,然后您可以访问一个filter()方法,该方法接受一个过滤器可调用。
过滤器可调用用于在GenericBag的数据上执行 array_filter()
命令,以提取一个子集项,然后用于创建和返回一个具有相同类的新GenericBag。
排序
在您的GenericBag类中,实现 GenericBagSortInterface
类和 trait GenericBagSortTrait;
,然后您可以访问一个sort()方法,该方法接受一个排序可调用。
排序可调用用于对GenericBag的数据执行 uasort()
命令,对GenericBag的项进行排序。不返回任何值。
其他访问形式
DataObjects还实现了ArrayIterator和Count接口,这意味着如果您愿意,您可以使用对象进行循环或计数值。