era269/normalizable

面向对象归一化

v0.6.0 2022-03-09 19:22 UTC

README

PHP Stan Badge codecov

对象控制下的归一化。

  1. 所有私有对象属性应准备好进行归一化。通过在 NormalizationFacade 中添加或更改归一化器的顺序,可以轻松地自定义归一化过程。
  2. 为了允许归一化自定义,对象必须实现以下接口
    1. NormalizableInterface
    2. NormalizationFacadeInterface

描述

NormalizableInterface

基本接口。可以单独使用来构建完全手动的归一化。如何

  1. 任何对象实现 NormalizableInterface
  2. NormalizableInterface::normalize 中的对象::normalize 被调用,对于所有需要在归一化视图中存在的对象

NormalizableTrait

如果需要所有归一化自动发生,则必须将 NormalizableTraitNormalizableInterface 一起使用。在这种情况下,所有对象都应该由 DefaultNormalizationFacade 支持。

DefaultNormalizationFacade

将根据以下规则归一化所有私有对象属性

  1. AsIsKeyDecorator 属性名将成为数组键,没有任何修饰
  2. 所有属性都将通过预定义的归一化器进行处理
    1. NotObjectNormalizer 将返回非对象本身
    2. ListNormalizableToNormalizableAdapterNormalizer 将处理可归一化对象的数组
      1. 所有键都将保持不变 AsIsKeyDecorator
      2. 所有值都将根据当前规则由 DefaultNormalizationFacade 进行处理
    3. NormalizableNormalizer 将调用 NormalizableInterface::normalize
    4. WithTypeNormalizableNormalizerDecorator 是对 NormalizableNormalizer 的装饰,添加具有归一化对象 ShortClassName 的 @type 字段
    5. ScalarableNormalizer 将获取实现 ScalarableInterface 的对象中的标量值
    6. StringableNormalizer 将获取实现 StringableInterface 的对象中的标量值
    7. 最后一个是 FailNormalizer,如果没有找到归一化器,它将抛出异常

NormalizationFacadeAwareInterface

应由所有可归一化对象实现,以支持归一化自定义。归一化应由自定义 NormalizationFacade 实现启动,并将其递归地设置到所有可归一化对象中。