html - ¿Cómo salir del bloque de código PHP?



code-design (7)

Si esto es para algo más que un experimento, lo estás haciendo mal . Deja de hacer la programación orientada a incluir como empezar a aprender OOP.

Bueno ... siempre se podría ajustar el contenido <?php ?> En una función anónima;

<?php $f = function () use (&$a) {

    if ($a)
    { 
        echo 1;
        return;
    }
    echo 2;

};$f(); ?>

<?php $f = function () {

    echo 2;

};$f(); ?>

Esto funcionaría en PHP 5.3+. Y si necesita compartir una variable, puede inyectarla en el ámbito con la instrucción use() en la definición.

Pero déjame repetir:

Si quieres hacer algo como esto en código de producción, lo estás haciendo mal.

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.


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");
?>

No, no hay ninguno. Pero lo que podría hacer es poner una etiqueta al final de cada bloque y luego usar goto (no recomendado, pero cuando no quiera un gran if ...) (ps: vea la respuesta de @ gd1 como una sugerencia aquí; -PAG)).

<?php
    if (!A) goto exit_1;
    print("1");
exit_1: ;
?>

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

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.


La mención anterior de Darryl Hein de TCPDF es probablemente una gran idea. El código de Nicola Asuni es bastante práctico y poderoso. El único asesino es que si alguna vez planea fusionar archivos PDF con su PDF generado, no tiene esas características. Tendría que crear el PDF y luego combinarlo utilizando algo como PDFTK de Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).





php html code-design