2011-05-26 12 views
17

Estoy incluyendo el archivo inner.php en outer.php, tengo una condición en inner.php en la que quiero dejar de ejecutar inner.php pero NO toda la secuencia de comandos, es decir, quiero saltar al primera línea en outer.php después de la inclusión de inner.php, y no quiero envolver todo el código en inner.php en una declaración if.Omitir el resto del archivo (incluido) en PHP

¿Hay alguna manera de hacer esto de lo contrario?

Respuesta

26

Eso sí, return;return($value); o en el nivel superior del archivo inner.php.

Si llama desde un ámbito global, a continuación, se terminó ejecución del script actual . Si el archivo de script actual fue include()ed o require()ed, entonces el control se devuelve al archivo de llamada . Por otra parte, si el archivo de script actual fue include()ed, entonces el valor dado a return() será devuelto como el valor de la llamada include() .

+1

Escogido por la minuciosidad de la explicación, respondió * específicamente * mi pregunta – MeLight

+0

¡Genial! Gracias :-) return realmente me ayudó – Can

+0

+1, nunca me di cuenta de que 'require' o' include' podrían tener un valor de retorno. Utilizando una devolución puedo verificar si auto incluye proporcionar clases válidas un poco mejor: D –

9

Puede simplemente llamar al return en su archivo de inclusión, pero si tiene que hacer esto, entonces sugiere que hay algún problema con su arquitectura. Por ejemplo, considere este archivo de inclusión:

<?php 
// include.php 
echo "This is my include"; 
return; 
echo "This is after the include"; 

..included en la siguiente página:

<?php 
// index.php 
include('include.php'); 

La salida se obtendría es: This is my include.

+0

Le recomendé usar un requerimiento para evitar que su página se ejecute si no se encuentra el archivo incluido. También estoy de acuerdo en que probablemente algo esté mal en tu arquitectura si quieres hacer esto. Puede dividir sus archivos de inclusión o hacer pruebas condicionales en su archivo de inclusión. – 3nixios

2

¿Qué tal tener dos archivos para interno. La primera y la segunda parte y colocar la condición en la segunda incluyen?

2

lanzar una excepción en el punto en el que desea detener

// in inner.php: 
// ...some code... 

throw new Exception('Error description'); 

// ...some code which will not always execute... 

y atraparlo en el archivo en el que desea reanudar

// in outer.php 
try { 
    include 'inner.php'; 
} catch (Exception $e) { 
    //TODO: add error handling here 
} 

ACTUALIZACIÓN

diferencia usando return; como sugieren otras respuestas aquí, usar excepciones romperá un ywhere, incluso si está en alguna función dentro de inner.php

Cuestiones relacionadas