diephp/data-object

简单对象,可用于DTO/MODEL/ValueObject。

v1.0.0 2024-05-24 10:49 UTC

This package is auto-updated.

Last update: 2024-09-24 13:46:13 UTC


README

简单对象,可用于DTO/MODEL/ValueObject。

概述

DataObject类是一个灵活的数据容器,设计用于作为数据传输对象(DTO)、模型或值对象。它可以初始化为关联数组,并提供各种方法来操作和访问数据。此类实现了\JsonSerializableArrayAccess接口。

功能

  • 使用关联数组初始化
  • 实现\JsonSerializableArrayAccess接口
  • 支持点表示法以访问嵌套数据
  • 提供合并、过滤、映射和转换数据的方法
  • 如果对象实现了toArray方法,则自动将其转换为数组
  • 提供诸如hashflattencollapseclone等各种实用方法

安装

通过Composer安装包

composer require diephp/dataobject

或手动将其添加到composer.json

"require": {
    "diephp/dataobject": "^1.0.0"
}

用法

初始化

创建一个新的DataObject实例

use DiePHP\DataObject;

$data = new DataObject([
    'name' => 'John Doe',
    'email' => 'john.doe@example.com'
]);

或使用静态的of方法

$data = DataObject::of([
    'name' => 'John Doe',
    'email' => 'john.doe@example.com'
]);

访问数据

使用属性表示法或数组访问来访问数据

echo $data->name; // John Doe
echo $data['email']; // john.doe@example.com

检查键是否存在

if ($data->has('name')) {
    // Key exists
}

操作数据

设置值

$data->set('name', 'Jane Doe');

获取带默认值的值

$email = $data->get('email', 'default@example.com');

合并新数据

$data->merge([
    'address' => '123 Main St',
    'phone' => '123-456-7890'
]);

过滤数据

$data->filter(function ($value, $key) {
    return !empty($value);
});

映射数据

$mappedData = $data->map('*', function ($value) {
    return strtoupper($value);
});

实用方法

转换为数组

$array = $data->toArray();

转换为JSON

$json = json_encode($data);

获取数据的MD5哈希值

$hash = $data->hash();

克隆对象

$clone = $data->clone();

示例

use DiePHP\DataObject;

$data = new DataObject([
    'user' => [
        'name' => 'John Doe',
        'email' => 'john.doe@example.com'
    ]
]);

echo $data->get('user.name'); // John Doe

$data->set('user.address', '123 Main St');
echo $data->get('user.address'); // 123 Main St

$data->merge(['user.phone' => '123-456-7890']);
echo $data->get('user.phone'); // 123-456-7890

$data->filter(function ($value, $key) {
    return !empty($value);
});

echo $data->hash(); // MD5 hash of the data

echo json_encode($data); // JSON representation

许可

此项目使用MIT许可证。有关详细信息,请参阅LICENSE文件。