
Il est facile de trouver des éléments de classe privée inutilisés, car ils ne sont pas utilisés dans la classe elle-même. Mais qu'en est-il des méthodes / propriétés / constantes publiques?
final class Book
{
public function getTitle(): string
{
// ...
}
- public function getSubtitle(): string
- {
- // ...
- }
}Comment pouvons-nous détecter un élément public inutilisé?
C'est exactement ce que fait ce package.
Cette technique est très utile pour les projets privés et pour détecter le modificateur public accidentellement utilisé qui doit être changé en private comme appelé localement uniquement.
composer require tomasvotruba/unused-public --devLe package est disponible pour la version PHP 7.2+.
Avec le programme d'installation d'extension PHPSTAN, tout est prêt à s'exécuter.
Activez chaque élément par eux-mêmes avec une configuration simple:
# phpstan.neon
parameters :
unused_public :
methods : true
properties : true
constants : trueAvez-vous des centaines de méthodes publiques signalées? Vous n'avez pas le temps de les vérifier tous, mais vous voulez les gérer progressivement?
Définir la configuration de% autorisée maximale:
# phpstan.neon
parameters :
unused_public :
methods : 2.5Cela signifie que 2,5% de toutes les méthodes publiques sont autorisées comme inutilisées:
Voulez-vous vérifier les appels de méthode locale uniquement qui ne doivent pas être supprimés, mais être transformés en private / protected à la place?
# phpstan.neon
parameters :
unused_public :
local_methods : true Certaines méthodes sont utilisées uniquement dans des modèles de brindilles ou de lame, et pourraient être signalées de manière positive comme inutilisée.
{{ book. getTitle () }}Comment pouvons-nous les exclure? Ajoutez vos répertoires Twig ou Blade dans Config pour exclure les noms de méthodes:
# phpstan.neon
parameters :
unused_public :
template_paths :
- templates Dans certains cas, les règles signalent de faux positifs:
Les fournisseurs open source conçoivent l'API publique à utiliser par les projets. L'élément est-il signalé comme inutilisé, mais il est en fait conçu pour être utilisé public?
Marquez la classe ou l'élément avec une annotation @api pour le sauter:
final class Book
{
/**
* @api
*/
public function getName ()
{
return $ this -> name ;
}
}