variable - ¿cuál cree que es la importancia de combinar correctamente código html y php en una página web?




¿Cómo salir del bloque de código PHP? (5)

En PHP, ¿es posible salir de un bloque de código PHP (es decir, las etiquetas PHP)?

<?php
    if (!A) phpexit();
    print("1");
?>

<?php
    print("2");
?>

Entonces, si A era verdadero, entonces el resultado es 12 , y si A era falso, entonces el resultado es 2 .

Sé que puedes hacer esto con una sentencia if o algo así, pero quiero saber si también hay alguna función especial de PHP que pueda hacer esto.


Hay un operador de goto , pero le recomiendo encarecidamente que no utilice este tipo de trucos ("código de espagueti"). Es mejor que uses bloques estructurados, no hay nada de malo en ellos.

Antes de usar goto , considere soluciones alternativas : por ejemplo, puede include diferentes scripts dependiendo de la condición A


Me he encontrado en varias situaciones en las que el resto de un bloque de código PHP debe omitirse debido a una condición de error (error de conexión de la base de datos, entrada no válida, etc.). Como estudiante, mi profesor simplemente usa die , que detiene el análisis del archivo por completo, dejando la página incompleta, sin el pie de página o incluso las etiquetas de cierre HTML </body></html> . Incluso cuando hay un error, no hay razón para generar HTML no válido al cortar las etiquetas de cierre.

Por supuesto, un enfoque puramente estructurado usaría las sentencias if , y esto es preferible a goto en la gran mayoría de las situaciones. Sin embargo, siento que si solo intentas saltar de un bloque de código PHP, colocar grandes segmentos de código en una estructura if / else es bastante poco elegante y puede hacer que el código sea más difícil de entender que simplemente usar una instrucción goto que salta al final del bloque de PHP, justo antes de ?> , ya que es difícil recordar que un montón de código es, de hecho, parte de una declaración condicional 50+ líneas debajo de las líneas if o elseif .

Todos dicen que las declaraciones goto son malas, pero existen usos válidos para hacer que el código sea más fácil de entender, como saltar de estructuras de control profundamente anidadas y saltar al final de un bloque de código PHP (dado que no hay lenguaje incorporado existe construcción para hacer eso).

Una construcción de código como goto no es inherentemente mala. Se trata de cómo lo usas.


No, y no tendría sentido. Imagina que puedes hacer esto y tienes este código:

<?php
    if (!A) phpexit();

    if (B) {
?>
        <b>Foo</b>
<?php
    }
?>
    <i>Baz</i>

¿A dónde phpexit() ? El bloque then del if (B) salta y entra de un bloque PHP, pero no quiere saltar a <b>Foo</b> desde if (!A) , ¿verdad? No tendría sentido saltar dentro de un bloque sin verificar la condición.

Como gd1 ya mostró , podrías hacer esto con goto pero eso haría que tu código no estuviera estructurado. Te harías muy difícil a ti mismo (y a los futuros mantenedores de tu código) comprender el flujo de tu código cuando tu código salta por todas partes.

En los lenguajes de bajo nivel (es decir, ensamblaje) solo tiene que trabajar con saltos, pero en los idiomas superiores los abstrae con estructuras como if , for y while . Estos proporcionan una estructura que le impide intencionalmente saltar a cualquier lugar que desee.


Podría haber dos soluciones:

1) menos hacky

Incluye el código que tienes en el bloque en archivos separados. Puede usar el return en ellos para detener el procesamiento del archivo incluido.

//file1.php
if (!A) return;
print("1");

// file2.php
print("2");

<?php include "file1.php";?>
<?php include "file2.php";?>  

2) más hacky (otros probablemente me maten)

Ponga el bloque en do { ... } while(false); Bloquear y romper con eso

<?php do {
    if (!A) break;
    print("1");
} while(false); ?>

<?php do {
    print("2");
} while(false); ?>

Si respetas demasiado la cultura geek pop y sientes que necesitas encajar (¡y hacerte popular!), Aquí hay una solución sin goto :

<?php
call_user_func(function() {
    if (!A) return;
    print("1");
});
?>

<?php
    print("2");
?>




code-design