本库目前正在开发中。请勿在生产环境中使用。
类型守卫模块是Pinkary 项目的一部分,它允许你将变量的类型缩小到更具体的类型。使用 type
函数,你可以执行特定的检查来确定对象的类型,然后以 PHPStan 和 Psalm 静态分析器认为类型安全的方式使用该对象。
以下是一个例子,我们使用 type
函数将之前类型为 mixed
的变量缩小到更具体的类型:
function config(): mixed;
// 在编译时,$apiKey 的类型是 `mixed`:
$apiKey = config('api_key');
// 我们指示静态分析器 $apiKey 是一个 `string`:
$apiKey = type($apiKey)->asString();
这是另一个例子,我们使用 type
函数将之前可能为 null
的变量类型缩小。在这个过程中,不会丢失任何类型信息:
/** @var array<int, User>|null $users */
$users = getUsers();
// 将类型缩小为 `array<int, User>`
$users = type($users)->not()->null();
再举一个例子,我们将变量的类型缩小为 Collection,而不会丢失类型信息:
/** @var Collection<int, User>|null $users */
$users = getUsers();
// 将类型缩小为 `Collection<int, User>`
$users = type($users)->as(Collection::class);
安装
需要 PHP 8.2+
你可以使用 Composer 将 Type Guard 安装到你的 PHP 项目中:
composer require pinkary-project/type-guard
使用方法
as
断言并将给定变量的类型缩小为更具体的类型。
$variable = type($variable)->as(User::class);
asInt()
断言并将给定变量的类型缩小为整数。
$variable = type($variable)->asInt();
asFloat()
断言并将给定变量的类型缩小为浮点数。
$variable = type($variable)->asFloat();
asString()
断言并将给定变量的类型缩小为字符串。
$variable = type($variable)->asString();
asBool()
断言并将给定变量的类型缩小为布尔值。
$variable = type($variable)->asBool();
asNull()
断言并将给定变量的类型缩小为 null。
$variable = type($variable)->asNull();
asCallable()
断言并将给定变量的类型缩小为可调用类型。
$variable = type($variable)->asCallable();
not()->null()
断言并将给定变量的类型缩小为非 null 值。
$variable = type($variable)->not()->null();
asArray()
断言并将给定变量的类型缩小为数组。
$variable = type($variable)->asArray();
asIterable()
断言并将给定变量的类型缩小为可迭代类型。
$variable = type($variable)->asIterable();
Type Guard 是 Pinkary 项目的一部分。它由 Nuno Maduro 创建,并在 MIT 许可证 下开源。