Wenn PHPStan auf meinem Code-Basis laufen bekomme ich den Fehler:PHPStan - Änderungstyp von Konstruktorparameter
Parameter #2 $credentials of class Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken constructor expects string, null given.
Dies liegt daran, die Docblock Konstruktor nur einen String als gültig Typ angibt. Aber wenn Sie die eraseCredentials()
Methode überprüfen, scheint es, dass null
auch ein gültiger Wert für $credentials
ist.
Nun möchte ich PHPStan anweisen, dass der Typ des $credentials
Parameters string|null
im Gegensatz zu string
ist.
Ich denke, ich würde eine Implementierung von MethodsClassReflectionExtension
benötigen, um das zu tun. Aber wenn ich das registriere, scheint es nicht die richtige Klasse zu sein.
Meine aktuelle Implementierung:
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();
}
}
Was muss ich tun, um zu PHPStan verstehen, dass die $credentials
Eigenschaft beide string
und null
Werte annimmt?
Offenbar hatte ich eine alte Version von 'symfony/security-core'. Ich habe es aktualisiert und jetzt ist dieser Fehler weg. Ich habe jedoch immer noch mehrere Fälle von diesem Problem übrig. Ich habe Ignorierregeln für diese Fälle hinzugefügt. –