moirei/objects

简单数据与数组对象。

1.1.0 2023-07-14 11:53 UTC

This package is auto-updated.

Last update: 2024-09-14 14:24:34 UTC


README

这是一个简单轻量级数据/数组对象的包。

安装

composer require moirei/objects

注意:此包不会自动转换嵌套对象。

用法

对象

final class User extends BaseObject
{
  public string $name;
  public string $email;
}
$user = new User([
  'name' => 'Joe',
  'email' => 'top_lad@mail.com',
]);

// or

$user = User::make([
  'name' => 'Joe',
  'email' => 'top_lad@mail.com',
]);

// or

$user = User::make();
$user->name = 'Joe';
$user['email'] = 'top_lad@mail.com';

...

dump($user->toArray());
dump($user);

访问或修改未定义属性会抛出异常。

非严格对象

/**
 * @property string|null $city
 */
final class User extends BaseObject
{
  protected $strict = false;
  public string $name;
  public string $email;
}
$user = User::make([
  'name' => 'Joe',
  'email' => 'top_lad@mail.com',
]);

...
$user->city = 'Adelaide';

允许访问或修改未定义属性。

理由

如果您不再愿意将未类型化数组作为数据传递或返回给应用逻辑,并且需要一个简单的解决方案,那么这个包就是为您准备的。

对于下面的示例,我们可以确信从操作返回的数据类型。

final class InstallationStatus extends BaseObject
{
    public bool $completed = false;
    public ?string $key;
    /** @var string[] */
    public array $errors = [];
}
class InstallAppAction{
  use AsAction;

  public function handle(string $code): InstallationStatus{
    $status = InstallationStatus::make();

    try{
      // logic
      $status->completed = true;
      $status->key = '...';
    }catch(\Exception $e){
      $status->errors = [
        $e->getMessage()
      ];
    }

    return $status;
  }
}

许可证

MIT

特别感谢Eduardo San Martin Morote (posva) 提供的 编码工具