我有一个项目(PHP 8.2.6、Yii2、PHPStan)。运行 phpstan 命令后,我得到了一个错误列表,需要修复这些错误才能成功检查。错误示例:
yii\base\Application::$request
。yii\base\Application::$response
。这个错误是因为使用这样的代码引起的:
Yii::$app->request->post()
或 Yii::$app->response
等
第一个解决方案是在代码中的任何地方添加
/** @phpstan-ignore-next-line */
,例如,将使用 Yii::$app->response->。
问题,还有其他正确的方法可以消除此类错误吗?
我的 PHPStan 配置:
parameters:
level: 2
bootstrapFiles:
- vendor/yiisoft/yii2/Yii.php
excludePaths:
- 'runtime/*'
- 'vendor/*'
- 'tests/*'
stubFiles:
- stubs/ActiveRecord.stub
- stubs/Yii.stub
- stubs/YiiRbac.stub
- stubs/YiiBase.stub
- stubs/YiiWeb.stub
- stubs/YiiConsole.stub
universalObjectCratesClasses:
- stdClass
在调试此类问题时,应该验证
Yii::$app
是什么类型。您可以对类型进行故障排除:
\PHPStan\dumpType(Yii::$app);
是你所期望的实际类型吗
yii\base\Application
?如果是,是什么让您相信 yii\base\Application::$request
财产存在?它可能没有在类上以本机方式声明。这是通过__get
定义的神奇属性吗?类上面是不是少了@property
PHPDoc?
请参阅有关该主题的有用文章:https://phpstan.org/blog/solving-phpstan-access-to-undefined-property
如果您需要修复错误的第 3 方 PHPDocs,您可以编写存根文件:https://phpstan.org/user-guide/stub-files
我正在为 PHPStan 开发一个扩展,它可以解决这些问题。