我在我的 PHP 8.4.2 项目中使用 PHPStan 进行静态分析,我遇到了一个返回多种类型或 null 的类方法的问题。这是我的带有类型提示和 PHPDoc 注释的方法:
/**
* Returns a value of the requirements array by its key
* @return array<string, mixed>|string|int|float|null
*/
public static function getRequirementsArrayImageByKey(string|int $key): string|int|float|array|null
{
return self::$requirementsArrayImage[$key] ?? null;
}
该方法返回一个包含字符串键和混合值的数组、一个字符串、一个 int、一个 float 或 null。我相信我的类型提示和 PHPDoc 注释应该是正确的。
但是,PHPStan 给我以下错误:
[phpstan] 方法 Core\DataManager::getRequirementsArrayImageByKey() 应返回数组
我尝试添加显式类型检查作为解决方法,但我对这个解决方案不满意,因为它给代码增加了不必要的复杂性。我正在寻找一个更清洁的解决方案来解决这个问题。
我错过了什么,或者我如何配置 PHPStan 以了解正确的返回类型而不在我的代码中添加额外的类型检查?
附录: $requirementsArrayImage 看起来像这样:
/**
* Provides basic requirements
* @var array<string, array<string, string|int>|string|int|float>
*/
private static array $requirementsArrayImage = [];
public function __construct()
{
self::$requirementsArrayImage = [
'allowed_ratio' => ['1', '4/3', '16/9'],
'allowed_file_types_array' => ['jpeg', 'png'],
'min_pixels' => 2000,
'min_width_px' => 400,
'min_height_px' => 200,
...
];
}
...