跳至正文

更新日志 1.6.0 — 2023 年 8 月 25 日

重要变更

交响乐捆绑包

现在可以为 Symfony 应用程序提供一个捆绑包,它将简化框架中 Valinor 库的集成和使用。该文档可以在CuyZ/Valinor-Bundle存储库中找到。

请注意,文档已更新,添加了有关捆绑包的信息以及有关如何将库集成到其他框架中的提示。

PHP 8.3 支持

感谢@TimWolla ,该库现在支持 PHP 8.3,该版本已进入测试阶段。请随时使用这个新版本测试该库,并报告存储库中遇到的任何问题。

更好的类型解析

类型解析器的第一层已被完全重写。前一个将使用正则表达式来拆分标记中的原始类型,但这导致了限制(主要涉及带引号的字符串),这些限制现已修复。

尽管此更改不会影响最终用户,但这是库中的重大更改,并且测试可能未涵盖某些边缘情况。如果发生这种情况,请报告存储库中遇到的任何问题。

以前的限制示例,现已解决:

// Union of strings containing space chars
(new MapperBuilder())
    ->mapper()
    ->map(
        "'foo bar'|'baz fiz'",
        'baz fiz'
    );

// Shaped array with special chars in the key
(new MapperBuilder())
    ->mapper()
    ->map(
        "array{'some & key': string}",
        ['some & key' => 'value']
    );

更高级的数组键处理

现在可以使用任何字符串或整数作为数组键。现在接受以下类型并将与映射器一起正常工作:

$mapper->map("array<'foo'|'bar', string>", ['foo' => 'foo']);

$mapper->map('array<42|1337, string>', [42 => 'foo']);

$mapper->map('array<positive-int, string>', [42 => 'foo']);

$mapper->map('array<negative-int, string>', [-42 => 'foo']);

$mapper->map('array<int<-42, 1337>, string>', [42 => 'foo']);

$mapper->map('array<non-empty-string, string>', ['foo' => 'foo']);

$mapper->map('array<class-string, string>', ['SomeClass' => 'foo']);

新功能

  • 添加对 PHP 8.3 ( 5c44f8 ) 的支持
  • 允许数组键中包含任何字符串或整数 ( 12af3e )
  • 支持 Atom / RFC 3339 / ISO 8601 格式的微秒 ( c25721 )

错误修复

  • 正确处理来自接口的方法的类型推断( 2657f8 )
  • 检测指定结构的数组类型中逗号后缺少的右括号 ( 2aa4b6 )
  • 在解析类内的类型时处理类名冲突( 044072 )
  • 使用intl.use_exceptions=1处理无效的 Intl 格式 ( 29da9a )
  • 通过创建所需的目录来改进缓存预热 ( a3341a )
  • 在运行时和缓存访问期间延迟加载特性 ( 3e7c63 )
  • 正确处理指定结构的数组键中的类/枚举名称( 1964d4 )

其他

  • 改进特性参数编译( c4acb1 )
  • 将基于正则表达式的类型解析器替换为基于字符的类型解析器 ( ae8303 )
  • 简化符号解析算法( f260cf )
  • 更新 Rector 依赖项 ( 669ff9 )