Bien que le nombre de lignes de code ne signifie absolument rien à la qualité d'un projet, il peut être intéressant de le mesurer. PHPLOC ne se réduit pas à cette statistique, il permet d'avoir un retour sur la structure d'un projet PHP.

PHPLOC, auparavant intégré à PHPUnit et donc créé par Sebastian Bergmann, fournit également d'autres mesures spécifiques à PHP, telles que la complexité cyclomatique (algorithme déterminant la complexité d'un programme informatique), le nombre de classes, la longueur moyenne des classes, la longueur moyenne de la méthode, etc.

PHPLOC est un outil à utiliser en ligne de commande et est très simple à utiliser.

Son installation se fait via composer. Ajoutez le module dans les dépendances dev de votre projet :

composer require --dev phploc/phploc

Si vous n'avez pas composer sur votre ordinateur, vous pouvez récupérer le fichier .phar de PHPLOC comme décrit dans la documentation :

wget https://phar.phpunit.de/phploc.phar
chmod +x phploc.phar
mv phploc.phar /usr/local/bin/phploc

Pour l'utiliser, lancez cette commande où le dernier paramètre est le nom du répertoire à analyser :

vendor/bin/phploc src

Un rapport détaillé de votre projet est alors affiché :

phploc 4.0.1 by Sebastian Bergmann.

Directories                                         13
Files                                               32

Size
  Lines of Code (LOC)                             3215
  Comment Lines of Code (CLOC)                    1118 (34.77%)
  Non-Comment Lines of Code (NCLOC)               2097 (65.23%)
  Logical Lines of Code (LLOC)                     659 (20.50%)
    Classes                                        467 (70.86%)
      Average Class Length                          14
        Minimum Class Length                         1
        Maximum Class Length                        60
      Average Method Length                          2
        Minimum Method Length                        0
        Maximum Method Length                       20
    Functions                                        0 (0.00%)
      Average Function Length                        0
    Not in classes or functions                    192 (29.14%)

Cyclomatic Complexity
  Average Complexity per LLOC                     0.15
  Average Complexity per Class                    4.06
    Minimum Class Complexity                      1.00
    Maximum Class Complexity                     16.00
  Average Complexity per Method                   1.63
    Minimum Method Complexity                     1.00
    Maximum Method Complexity                     9.00

Dependencies
  Global Accesses                                    0
    Global Constants                                 0 (0.00%)
    Global Variables                                 0 (0.00%)
    Super-Global Variables                           0 (0.00%)
  Attribute Accesses                               172
    Non-Static                                     171 (99.42%)
    Static                                           1 (0.58%)
  Method Calls                                     357
    Non-Static                                     345 (96.64%)
    Static                                          12 (3.36%)

Structure
  Namespaces                                        14
  Interfaces                                         0
  Traits                                             0
  Classes                                           32
    Abstract Classes                                 0 (0.00%)
    Concrete Classes                                32 (100.00%)
  Methods                                          154
    Scope
      Non-Static Methods                           149 (96.75%)
      Static Methods                                 5 (3.25%)
    Visibility
      Public Methods                               119 (77.27%)
      Non-Public Methods                            35 (22.73%)
  Functions                                          6
    Named Functions                                  0 (0.00%)
    Anonymous Functions                              6 (100.00%)
  Constants                                          6
    Global Constants                                 0 (0.00%)
    Class Constants                                  6 (100.00%)

Les informations parlent d'elles-même, inutile de les décrire.

Si vous souhaitez exclure certains répertoires de l'analyse de PHPLOC, cela est possible via l'option --exclude :

vendor/bin/phploc src --exclude=node_modules