Dans le développement du projet PHP, nous utilisons souvent Define ou const pour définir les constantes. Alors que le projet continue de se développer, le nombre de constantes augmentera également considérablement. Au fil du temps, certaines constantes peuvent être oubliées et ne référencées par aucun code. Ces constantes inutilisées augmentent les coûts de maintenance et réduisent la lisibilité et la maintenabilité du code. Afin d'améliorer la qualité du code, nous pouvons utiliser la fonction get_defined_constants combinée avec des méthodes d'analyse statique pour identifier et nettoyer les constantes inutilisées.
get_defined_constants est l'une des fonctions intégrées de PHP, qui est utilisée pour renvoyer toutes les constantes définies dans le script actuel (y compris les constantes définies par l'utilisateur et les constantes internes PHP). Cette fonction peut accepter un paramètre booléen, et lorsque le paramètre est vrai , il renvoie un tableau multidimensionnel groupé par classification; Sinon, il renvoie un tableau plat.
Exemple:
print_r(get_defined_constants(true));
get_defined_constants ne nous dit pas directement si une constante est utilisée. Mais nous pouvons combiner les deux étapes suivantes pour atteindre cet objectif indirectement:
Obtient tous les noms constants définis par l'utilisateur.
Itérer dans le code du projet et vérifiez si ces constantes sont référencées.
Mark Les constantes non référencées comme "inutilisées".
Voici une idée de mise en œuvre simple, en supposant que vous maintenez un projet petit et moyen:
$allConstants = get_defined_constants(true);
$userConstants = isset($allConstants['user']) ? $allConstants['user'] : [];
$projectDir = __DIR__ . '/src'; // Répertoire de code source du projet
$usedConstants = [];
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($projectDir));
foreach ($files as $file) {
if ($file->isFile() && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
$content = file_get_contents($file->getPathname());
foreach ($userConstants as $name => $value) {
// Recherche de chaînes simples,Vous pouvez également utiliser une précision de correspondance régulière
if (strpos($content, $name) !== false) {
$usedConstants[$name] = true;
}
}
}
}
$unusedConstants = array_diff_key($userConstants, $usedConstants);
echo "Liste des constantes inutilisées:\n";
print_r(array_keys($unusedConstants));
Pour les grands projets, il est recommandé d'utiliser des expressions régulières pour éviter les erreurs de jugement, telles que les interférences lorsque les noms de variables sont similaires aux noms constants.
Il est recommandé de coopérer avec les outils d'analyse statique du code (comme le phpstan, le psaume) pour une vérification multiple.
Avant de retirer les constantes, il est recommandé de tester à plusieurs reprises dans l'environnement de développement pour éviter de supprimer accidentellement des constantes qui sont référencées dynamiquement.
Supposons que votre projet définisse les constantes suivantes:
define('API_URL', 'https://m66.net/api/');
define('DEBUG_MODE', true);
define('UNUSED_CONST', 12345);
Après l'analyse du script, il est constaté que UNUSED_CONST n'est pas référencé dans le projet, vous pouvez donc envisager de le retirer du code pour améliorer la netteté du code du projet.
Bien que PHP n'ait pas de fonctionnalité intégrée pour trouver directement des constantes inutilisées, nous pouvons toujours y parvenir via la fonction GET_DEFINE_CONSTANT et la logique de balayage de code simple. La gestion rationnelle des constantes aide à améliorer la lisibilité et la maintenabilité du code, et reflète également la maturité et la normalisation d'un projet.