forrest79 / phpstan-narrow-types
PHPStanNarrowTypes提供使用assert功能来缩小复杂数组/列表类型的工具。
Requires
- php: ^8.1
- nikic/php-parser: ^5.0
- phpstan/phpstan: ^1.10
Requires (Dev)
- forrest79/phpcs: ^1.5
- forrest79/phpcs-ignores: ^0.4
- phpstan/phpstan-strict-rules: ^1.5
This package is auto-updated.
Last update: 2024-09-13 20:27:45 UTC
README
简介
在运行时检查复杂数组/列表类型(通过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_...
函数都受支持:NULL
、int
、float
、string
、bool
、callable
和object
。可以使用经典的<...>
语法(从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