scrumworks/property-reader

支持与类型属性和 phpdoc 一起工作的属性读取器

v0.7.1 2024-08-12 15:21 UTC

README

Build Status

安装

composer require scrumworks/property-reader

文档

类属性可以翻译成以下变体

null

null 返回没有信息的属性。

通常为 mixed 类型,但在数组类型中表现不同。

public $var;

MixedVariableType

对于直接有 mixed 信息的变量返回。

/**
 * @var mixed
 */
public $var;

ScalarVariableType

支持以下基本标量类型

  • int, integer
  • float
  • bool, boolean
  • string
/**
 * @var integer
 */
public int $var;

ArrayVariableType

数组被认为是顺序数组或哈希表。

数组按以下方式转换:(我们使用定义 array<key, type>

  • 泛型 array 有类型 array<null, null>
  • 顺序 int[] 有类型 array<null, int>
  • 哈希表 array<string, string> 有类型 array<string, string>

一般来说 - nullkey 中表示顺序数组,其他类型(仅支持 integerstring)表示哈希表。唯一的区别是 key == value == null,则是泛型数组。

警告 - mixed[] 的类型与 array 不同

我们还支持嵌套数组,如 int[][]array<string, string>[]

/**
 * @var int[]
 */
public array $var;

ClassVariableType

/**
 * @var SomeClass
 */
public SomeClass $var;

UnionVariableType

/**
 * @var int|string
 */
public $var;

类型的可空性

可以通过以下方式将每个类型设置为可空

  • ?int
  • int|null

类型 nullMixedVariableType 默认是可空的。

警告 - ?int|string 不是 (?int)|string,而是 int|string|null

示例用法

<?php

use ScrumWorks\PropertyReader\PropertyTypeReader;
use ScrumWorks\PropertyReader\VariableTypeWriter;
use ScrumWorks\PropertyReader\VariableTypeUnifyService;

class Example
{
    public $untyped;

    public int $integer;

    /**
     * @var ?string
     */
    public $nullableString;

    /**
     * @var array<string, string[]>
     */
    public array $hashmap;

    public VariableTypeWriter $class;

    /**
     * @var int|int[]|null
     */
    public $union;
}

$reflection = new ReflectionClass(Example::class);

$variableTypeUnifyService = new VariableTypeUnifyService();
$propertyTypeReader = new PropertyTypeReader($variableTypeUnifyService);
$variableTypeWriter = new VariableTypeWriter();

foreach ($reflection->getProperties() as $propertyReflection) {
    $variableType = $propertyTypeReader->readUnifiedVariableType($propertyReflection);
    printf(
        "%s: %s\n",
        $propertyReflection->getName(),
        $variableTypeWriter->variableTypeToString($variableType)
    );
}

将产生

untyped: mixed
integer: int
nullableString: ?string
hashmap: array<string, string[]>
class: ScrumWorks\PropertyReader\VariableTypeWriter
union: ?int|int[]

VariableType API

use ScrumWorks\PropertyReader\VariableType\ArrayVariableType;
use ScrumWorks\PropertyReader\VariableType\ScalarVariableType;

// load object...

/** @var ArrayVariableType $hashmapType */
$hashmapType = $propertyTypeReader->readUnifiedVariableType($reflection->getProperty('hashmap'));
assert($hashmapType->isNullable() === false);
assert($hashmapType->getKeyType() instanceof ScalarVariableType);
assert($hashmapType->getKeyType()->getType() === ScalarVariableType::TYPE_STRING);

测试

您可以使用以下命令运行测试

composer run-script test

贡献指南

请随意打开一个问题或添加一个拉取请求。

致谢

人员