首页 > 解决方案 > 怎么说phpstan那个类被孩子代替了

问题描述

我有一个用于记录的 laravel 包。它是这样使用的。

activity()
   ->performedOn($model)
   ->causedBy($user)
   ->log('Look, I logged something');

activity()帮助程序返回ActivityLogger按类名从容器中获取的供应商类。

我必须向供应商记录器添加其他方法,因此代码将如下所示:

activity()
   ->performedOn($model)
   ->causedBy($user)
   ->relates('#123') // new decorator
   ->log('Look, I logged something');

我创建了一个子类,并在容器中用新的供应商类替换了供应商类。一切正常,除了 phpstan 抱怨relatesActivityLogger.

我可以说我的应用程序的 phpstanActivityLogger被替换为 phpstanMyActivityLogger吗?

标签: phpstan

解决方案


我猜你可以使用存根文件来覆盖activity函数的返回类型。

stubs/activity.stub

/**
 * @phpstan-param string $logName
 * @phpstan-return YOUR_CUSTOM_OBJECT_TYPE_HERE
 */
function activity(string $logName = null) {}

然后在你的phpstan.neon配置文件中:

parameters:
    stubFiles:
        - stubs/activity.stub

推荐阅读