forrest79/phpstan-narrow-types

PHPStanNarrowTypes提供使用assert功能来缩小复杂数组/列表类型的工具。

安装次数: 6

依赖: 0

建议者: 0

安全: 0

星星: 5

关注者: 1

分支: 0

开放问题: 0

类型:phpstan-extension

v0.3 2024-03-12 20:58 UTC

This package is auto-updated.

Last update: 2024-09-13 20:27:45 UTC


README

Latest Stable Version Monthly Downloads License Build

简介

在运行时检查复杂数组/列表类型(通过assert)并缩小变量以供PHPStan使用。

这个库处于“概念验证”状态。它可能会随时更改或取消。源代码和测试都是按照“它正在正常工作”的方式编写的。类型解析非常简单,并且没有经过很好的测试。

这个库的目的是消除@var注释。您可以使用assert PHP函数检查复杂数组/列表类型,就像检查简单类型一样(例如:assert(is_int($var));)。

不支持数组/对象的形状。数组必须使用<...>定义,不支持[]语法。

有一个全局函数is_type(mixed $var, string $type)或静态方法Forrest79\NarrowTypes::isType(mixed $var, string $type)。这个函数真的会检查$var中的数据与类型描述是否匹配,并且有一个相应的PHPStan扩展,这样PHPStan就会理解$var处于描述的类型中。

示例

$arr = [3.14, 5, 10];
assert(is_type($arr, 'list<float|int>'));

通常,在生产环境中禁用assert函数,因此检查仅在开发/测试环境中进行,并且无需在生产环境中分发此库。

安装

要使用此扩展,请在Composer中要求它

composer require --dev forrest79/phpstan-narrow-types

您可能只想为开发使用此扩展。

使用方法

所有简单类型及其相应的is_...函数都受支持:NULLintfloatstringboolcallableobject。可以使用经典的<...>语法(从PHPStan中已知)定义具有指定类型的数组array和列表list

您还可以使用|运算符,如int|string

所有未匹配为内部简单类型的字符串都将解析为对象名称。对象名称可以用完整命名空间定义(当以\开头时),或者按照经典方式从实际类命名空间中使用use导入完成(归功于nikic/php-parser)。

简单示例

assert(is_type($var, 'int'));
assert(is_type($var, 'int|string'));

对于简单类型,建议使用内部PHP函数is_...

主要目标是替换以下内容:

/** @var array<string|int, list<Db\Row>> $arr
$arr = json_decode($data);

用以下内容替换:

$arr = json_decode($data);
assert(is_type($arr, 'array<string|int, list<Db\Row>>'));

这样,变量$arr就会检查其定义的类型。

要将此库作为PHPStan扩展使用,请将extension.neon包含在您的项目PHPStan配置中

includes:
    - vendor/forrest79/phpstan-narrow-types/extension.neon