Errores comunes con estructuras de control
Estos son algunos de los errores más frecuentes que cometemos los principiantes al trabajar con estructuras de control en PHP:
Errores con condicionales (if/else)
El error mas frecuente: confundir el operador de asignación con el de comparación
<?php
if ($variable = 5) { // INCORRECTO: esto asigna 5 a $variable
// Este código siempre se ejecutará
}
// CORRECTO:
if ($variable == 5) { // Comparación de valor
// Se ejecuta solo si $variable es igual a 5
}
?>
No usar comparación estricta (===
) cuando es necesario
<?php
// PELIGROSO: "0", 0, false, null, y "" son iguales con ==
if ($valor == false) {
// Se ejecutará con cualquiera de esos valores
}
// SEGURO: Compara valor y tipo
if ($valor === false) {
// Solo se ejecuta si $valor es exactamente false
}
?>
Mi especialidad: olvidar las llaves en bloques de múltiples líneas
<?php
// INCORRECTO:
if ($condicion)
echo "Primera línea";
echo "Segunda línea"; // Esta línea siempre se ejecuta
// CORRECTO:
if ($condicion) {
echo "Primera línea";
echo "Segunda línea";
}
?>
Errores con switch
Olvidar el break
en los case
<?php
// INCORRECTO:
switch ($opcion) {
case 'a':
echo "Opción A";
// Sin break, continúa ejecutando el siguiente case
case 'b':
echo "Opción B"; // Se ejecuta si $opcion es 'a' o 'b'
break;
}
// CORRECTO:
switch ($opcion) {
case 'a':
echo "Opción A";
break;
case 'b':
echo "Opción B";
break;
}
?>
Comparaciones complejas en switch
<?php
// INCORRECTO: switch solo puede comparar valores directos
switch ($edad) {
case ($edad >= 18): // Esto no funciona como se espera
echo "Mayor de edad";
break;
}
// CORRECTO: Usar if/else para comparaciones complejas
if ($edad >= 18) {
echo "Mayor de edad";
}
?>
Errores con bucles
Bucles infinitos
<?php
// INCORRECTO: bucle infinito
$i = 1;
while ($i <= 10) {
echo $i;
// Olvidó incrementar $i
}
// CORRECTO:
$i = 1;
while ($i <= 10) {
echo $i;
$i++; // Incrementa la variable
}
?>
Inicialización incorrecta de bucles for
<?php
// INCORRECTO: variable no declarada
for ( $i < 10; $i++) { // $i no está inicializada
echo $i;
}
// CORRECTO:
for ($i = 0; $i < 10; $i++) {
echo $i;
}
?>
Modificar la variable de iteración dentro de un foreach
<?php
// INCORRECTO: modificar la variable de iteración
foreach ($array as $item) {
$item = $item * 2; // No modifica el array original
}
// CORRECTO: usar referencia si se quiere modificar
foreach ($array as &$item) {
$item = $item * 2;
}
unset($item); // Importante: libera la referencia
?>
Errores de lógica
Condiciones anidadas excesivas
<?php
// DIFÍCIL DE MANTENER:
if ($condicion1) {
if ($condicion2) {
if ($condicion3) {
// Código muy anidado
}
}
}
// MEJOR:
if (!$condicion1 || !$condicion2 || !$condicion3) {
return; // Salir temprano
}
// Código principal aquí
?>
No validar entradas de formularios
<?php
// PELIGROSO: confiar en datos de entrada sin validar
$edad = $_POST['edad']; // Podría ser cualquier cosa
if ($edad >= 18) {
// Acceso permitido
}
// SEGURO:
$edad = filter_input(INPUT_POST, 'edad', FILTER_VALIDATE_INT);
if ($edad !== false && $edad >= 18) {
// Acceso permitido
}
?>
Comparar flotantes directamente
<?php
// INCORRECTO: comparación imprecisa de flotantes
if ($precio === 10.00) { // Puede fallar por imprecisión de decimales
// CORRECTO: usar un margen de error (épsilon)
if (abs($precio - 10.00) < 0.0001) {
?>