如何告诉 PHPStan 类实现中存在但接口中不存在的方法?

问题描述 投票:0回答:1

我在使用 PHPStan 时遇到以下问题。我有两个接口(

ClienInterface
ClientFactoryInterface
)和两个实现它们的类(
ConcreteClient
ConcreteApiClientFactory
)。
ConcreteClient
具有
ClienInterface
中未定义的方法。 当我尝试在代码中使用此方法时,出现 PHPStan 错误:
Call to an undefined method ClienInterface::mySpecificFunction().

我尝试过实现这一点,但没有成功: https://phpstan.org/blog/generics-by-examples# Couple-relevant-classes-together

我在 PHPStan 游乐场上的示例: https://phpstan.org/r/4b3da235-fa57-4d86-b414-9dd7fbffe1f2

php annotations phpstan
1个回答
0
投票

PHPStan 需要有关具体类型的信息。该信息可以通过几种方式提供:

  1. 类型断言:将 PHPDoc 类似
    /** @var ConcreteClient $client */
    放在变量之前。
  2. 检查对象是否是具体类的实例,例如:
if ($client instanceof ConcreteClient) {
    $client->mySpecificFunction();
}
  1. 创建一个单独的工厂或工厂方法,返回具体类型而不是接口。
© www.soinside.com 2019 - 2024. All rights reserved.