tebru/php-type

PHP 类型包装器,支持泛型语法

v0.1.7 2019-10-17 17:58 UTC

This package is auto-updated.

Last update: 2024-09-18 04:47:02 UTC


README

Build Status Code Coverage Scrutinizer Code Quality

此库包装类型字符串,并提供有关类型信息的API。它还支持泛型类型语法。

通用用法

最简单的方法是实例化一个新的TypeToken并传入类型。

new TypeToken('string');

该类还会规范化类型

$typeShort = new TypeToken('int');
$typeLong = new TypeToken('integer');

$typeShort->getRawType(); // 'integer'
$typeLong->getRawType(); // 'integer'

$typeShort->getPhpType(); // 'integer'
$typeLong->getPhpType(); // 'integer'

$typeShort->isInteger(); // true
$typeLong->isInteger(); // true

支持所有核心PHP类型以及代表通配符类型的?。如果在实例化类型时类型未知,可以使用此功能。所有可能的类型都作为类的常量表示。

类也以相同的方式工作

$type = new TypeToken(\My\Foo::class);

$type->getRawType(); // 'My\Foo'
(string)$type; // 'My\Foo'
$type->getPhpType(); // 'object'
$type->isObject(); // true
$type->isA(\My\Foo::class); // true

->isA() 除了传入的类名外,还检查实例化类型的父类和接口。

您还可以使用尖括号泛型语法。

$type = new TypeToken('My\Foo<string, My\Foo2>');

$type->getRawType(); // 'My\Foo'
(string)$type; // 'My\Foo<string, My\Foo2>'
$type->getPhpType(); // 'object'
$type->isObject(); // true
$type->isA(\My\Foo::class); // true

$generics = $type->getGenerics();
(string)$generics[0]; // 'string'
(string)$generics[1]; // 'My\Foo2'

调用 ->getGenerics() 将返回一个TypeToken对象的数组。

嵌套泛型以相同的方式工作

new TypeToken('array<string, array<int>>');

这可以表示一个键为字符串、所有值都是整数数组的数组。

如果您有一个变量,您可以使用静态工厂方法获取类型

TypeToken::createFromVariable($variable);

这使用单例方法 ::create(),它将在重复类型上返回相同的实例。