Sonarlint, похоже, считает, что закрытое статическое свойство, доступ к которому осуществляется внутри класса (по имени класса, а не по self
), не используется.Я не совсем уверен, почему это так: возможно, это считается ошибкой в коде для доступа к текущему классу по имени, а не по self
или даже static
, но я ожидаю, что это будет ошибкойпоскольку это подразумевает, что вы можете безопасно удалить имущество, а это не так.Конечно, это может быть ошибкой (ложное срабатывание) в sonarlint
Я написал этот пример:
class TestClass
{
private static $used = 'foobar';
public static function echoUsed()
{
echo TestClass::$used;
}
}
TestClass::echoUsed();
Это работает нормально, но выдает предупреждение 'php s1068' ниже,Я добавил изображение всплывающего окна и полную ошибку.
Кто-нибудь знает, намеренно ли это, как описано выше, или ошибка?
Ошибки:
![example of the warning in phpstorm](https://i.stack.imgur.com/PbYRQ.png)
Ссылка 'more' показывает полную ошибку:
Если поле private
объявлено, но не используется вПрограмма может считаться мертвым кодом и поэтому должна быть удалена.Это улучшит удобство сопровождения, поскольку разработчики не будут удивляться, для чего используется переменная.
Пример несовместимого кода
class MyClass {
private $foo = 4; //foo is unused
public function compute($a) {
return $a * 4;
}
}
Совместимое решение
class MyClass {
public function compute($a) {
return $a * 4;
}
}