Règle
Éviter l'utilisation de goto.
Le instruction goto instructions crée un programme contrôle
flux qui rend code difficile à suivre et maintenir.
Langues prises en charge : 45+Introduction
goto saute directement à des points arbitraires du code, rompant le flux d'exécution naturel. Cela rend l'analyse de l'état, la gestion des erreurs et les performances très difficiles. Maintenir du code avec des instructions goto augmente le risque de bugs subtils et de comportements inattendus. Des alternatives structurées produisent un code prévisible, lisible et maintenable.
Pourquoi c'est important
Implications de sécurité : Les sauts non structurés peuvent contourner les vérifications de validation ou d'autorisation, exposant potentiellement des opérations sensibles.
Impact sur les performances: Les chaînes de goto complexes rendent le profilage et l'optimisation plus difficiles, augmentant le risque de chemins d'exécution inefficaces.
Maintenabilité du code : L'instruction `goto` crée un flux de contrôle de type « spaghetti » difficile à refactoriser ou à étendre en toute sécurité.
Surface d'attaque : Des sauts incorrects peuvent exposer involontairement des chemins de code non sécurisés ou ignorer des sections critiques pour la sécurité.
Exemples de code
❌ Non conforme :
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
goto end;
}
echo "$i\n";
}
end:
echo "Jumped out!";
?>
Pourquoi c'est incorrect : Les instructions goto créent des boucles non structurées, ce qui rend difficile la compréhension du flux ou l'insertion sécurisée de logique supplémentaire.
✅ Conforme :
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
break;
}
echo "$i\n";
}
echo "Jumped out!";
?>
Pourquoi c'est important : L'utilisation d'une boucle for rend le flux de contrôle explicite, prévisible et maintenable, tout en conservant un comportement identique.
❌ Non conforme :
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Pourquoi c'est incorrect : les sauts goto obscurcissent le chemin d'erreur et l'exécution normale, rendant difficile de les suivre ou de les étendre.
✅ Conforme :
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Pourquoi c'est important : Les boucles structurées et les retours anticipés clarifient la logique, rendent la gestion des erreurs explicite et facilitent la maintenance.
Conclusion
Évitez le goto pour maintenir un code structuré, lisible et sécurisé. Utilisez des boucles, des fonctions et des retours anticipés pour un flux de contrôle prévisible. Cela réduit les coûts de maintenance, prévient les bugs subtils et assure des chemins d'exécution sûrs.
.avif)
