Regra
Evite o uso de goto.
O goto cria cria instruções não
não estruturado que torna o código difícil de de e manter.
Idiomas suportados: 45+Introdução
goto salta diretamente para pontos arbitrários no código, quebrando o fluxo natural de execução. Isso torna muito difícil o raciocínio sobre o estado, o tratamento de erros e o desempenho. Manter código com goto aumenta o risco de bugs sutis e comportamento inesperado. Alternativas estruturadas produzem código previsível, legível e de fácil manutenção.
Por que isso importa
Implicações de segurança: Saltos não estruturados podem ignorar verificações de validação ou autorização, potencialmente expondo operações sensíveis.
Impacto no desempenho: Cadeias de goto complexas dificultam a criação de perfis e a otimização, aumentando o risco de caminhos de execução ineficientes.
Manutenibilidade do código: O `goto` cria um fluxo de controle tipo espaguete que é difícil de refatorar ou estender com segurança.
Superfície de ataque: Saltos inadequados podem expor inadvertidamente caminhos de código inseguros ou ignorar seções críticas de segurança.
Exemplos de código
❌ Não-conforme:
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
goto end;
}
echo "$i\n";
}
end:
echo "Jumped out!";
?>
Por que está errado: As instruções goto criam loops não estruturados, dificultando a compreensão do fluxo ou a inserção segura de lógica adicional.
✅ Compatível:
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
break;
}
echo "$i\n";
}
echo "Jumped out!";
?>
Por que isso importa: Usar um loop for torna o fluxo de controle explícito, previsível e manutenível, preservando um comportamento idêntico.
❌ Não-conforme:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Por que está errado: saltos 'goto' obscurecem o caminho de erro e a execução normal, dificultando o acompanhamento ou a extensão.
✅ Compatível:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Por que isso importa: Loops estruturados e retornos antecipados tornam a lógica clara, o tratamento de erros explícito e a manutenção mais fácil.
Conclusão
Evite `goto` para manter um código estruturado, legível e seguro. Use loops, funções e retornos antecipados para um fluxo de controle previsível. Isso reduz o custo de manutenção, previne bugs sutis e garante caminhos de execução seguros.

