【发布时间】:2017-07-03 13:40:39
【问题描述】:
在我的代码库上运行 PHPStan 时出现错误:
Parameter #2 $credentials of class Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken constructor expects string, null given.
这是因为构造函数的 docblock 仅将字符串指定为有效类型。但是当您检查eraseCredentials() 方法时,似乎null 也是$credentials 的有效值。
现在我想告诉 PHPStan $credentials 参数的类型是 string|null 而不是 string。
我想我需要一个 MethodsClassReflectionExtension 的实现来做到这一点。但是当我注册它时,它似乎没有被调用到正确的类。
我目前的实现:
class UsernamePasswordToken implements MethodsClassReflectionExtension
{
public function hasMethod(ClassReflection $classReflection, string $methodName): bool
{
if ($classReflection->getName()===\Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::class) {
var_dump(__FILE__ . ':' . __LINE__ . ' :: ' . __METHOD__);die();
}
if ($methodName === '__construct' && $classReflection->getName() === UsernamePasswordTokenClass::class) {
return true;
}
return false;
}
public function getMethod(ClassReflection $classReflection, string $methodName): MethodReflection
{
var_dump(__FILE__ . ':' . __LINE__ . ' :: ' . __METHOD__);die();
}
}
我需要做什么才能让 PHPStan 了解 $credentials 属性同时接受 string 和 null 值?
【问题讨论】: