跳至正文

更新日志 1.10.0 — 2024 年 3 月 12 日

重要变更

放弃对 PHP 8.0 的支持

PHP 8.0 安全支持已于 2023 年 11 月 26 日结束。因此,我们在此版本中放弃对 PHP 8.0 的支持。

如果发现任何安全问题,如果人们需要的话,我们可能会考虑将修复程序向后移植到 1.9.x 版本,但我们强烈建议将您的应用程序升级到受支持的 PHP 版本。

Constructor特性介绍

期待已久的功能已登陆图书馆!

Constructor特性可以分配给对象内的任何方法,以自动将该方法标记为类的构造函数。这是比使用MapperBuilder::registerConstructor方法更方便的注册构造函数的方法,尽管它并不能取代它。

Constructor特性所针对的方法必须是公共的、静态的,并返回它所属类的实例。

final readonly class Email
{
    // When another constructor is registered for the class, the native
    // constructor is disabled. To enable it again, it is mandatory to
    // explicitly register it again.
    #[\CuyZ\Valinor\Mapper\Object\Constructor]
    public function __construct(public string $value) {}

    #[\CuyZ\Valinor\Mapper\Object\Constructor]
    public static function createFrom(
        string $userName, string $domainName
    ): self {
        return new self($userName . '@' . $domainName);
    }
}

(new \CuyZ\Valinor\MapperBuilder())
    ->mapper()
    ->map(Email::class, [
        'userName' => 'john.doe',
        'domainName' => 'example.com',
    ]); // john.doe@example.com

新功能

  • 引入Constructor特性( d86295 )

错误修复

  • 在 JSON 标准化中正确编码标量值 ( 2107ea )
  • 当输入包含多余的键时正确处理列表类型( 1b8efa )

其他

  • 放弃对 PHP 8.0 ( dafcc8 ) 的支持
  • 改进内部定义字符串类型( 105281 )
  • 重构文件系统缓存以提高性能( e692f0 )
  • 删除不需要的闭包转换( 972e65 )
  • 更新依赖项( c5627f )