tebru / php-type
PHP 类型包装器,支持泛型语法
v0.1.7
2019-10-17 17:58 UTC
Requires
- php: >= 7.1
Requires (Dev)
- phpunit/phpunit: ^6.5
This package is auto-updated.
Last update: 2024-09-18 04:47:02 UTC
README
此库包装类型字符串,并提供有关类型信息的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()
,它将在重复类型上返回相同的实例。