Sair de um script PHP dentro de outra página PHP
Pergunta
Eu estou tentando implementar o cache para um script PHP que estou escrevendo, mas eu continuo correndo para o seguinte problema. Eu quero o script para ser incluído em outras páginas PHP, mas quando eu tento passar o arquivo em cache e sair do script incorporado sai tanto o roteiro e a página pai, mas não analisa o resto do código na página pai . Veja o código abaixo para um exemplo.
index.php
<?php
echo "Hello World!<br />";
include("file2.php");
echo "This line will not be printed";
?>
file2.php
<?php
$whatever = true;
if ($whatever == true) {
echo "file2.php has been included<br />";
exit; // This stops both scripts from further execution
}
// Additional code here
?>
Se o index.php acima é executado você receber o seguinte resultado:
Hello World!
file2.php has been included
No entanto, eu estou tentando fazê-lo parecer com isto:
Hello World!
file2.php has been included
This line will not be printed
Solução
Apenas enrole o "código adicional aqui" em uma declaração mais?
<?php
$whatever = true;
if ($whatever == true) {
echo "file2.php has been included<br />";
} else {
// Additional code here
}
?>
Caso contrário, eu não estou certo o que você quer chegar. O exit comando sempre termina a execução atual em todo - não apenas a execução do arquivo atual (para o qual, não há comando)
Editar
Graças à comentários e mensagens de phlak, tomhaigh, MichaelM, e Mario, eu mesmo aprendi alguma coisa hoje - que você CAN , de fato terminar a execução de um único arquivo incluído w / o retorno comando. Thanks, guys!
Outras dicas
Use return;
vez de exit;
no arquivo incluído - isto só irá parar a execução desse script.
Note que um também usar isso para retornar um valor para o script pai por exemplo.
file1.php
<?php
echo 'parent script';
$val = include('file2.php'); //$val will equal 'value'
echo 'This will be printed';
file2.php
<?php
echo 'child script';
return 'value';
Eu, pessoalmente, tentar evitar if-else condições sempre que possível e uso (não tenho certeza se há um termo cunhado por ele, mas) early-saída interceptar condições.
index.php
<?php
echo 'header';
include 'content.php';
echo 'footer';
?>
content.php
<?php
if ($cached)
{
echo cached_version();
return; // return is not just for functions, in php...
}
//proceed with echoing whatever you want to echo if there's no cached version.
...
...
?>
Por que não encapsular o conteúdo de file2.php em uma função. Dessa forma, você pode retornar da função quando você precisa, e o resto da execução não será interrompido. por exemplo:
file2.php
<?php
// this function contains the same code that was originally in file2.php
function exe()
{
$whatever = true;
if ($whatever)
{
echo "file2.php has been included <br />";
// instead of exit, we just return from the function
return;
}
}
// we call the function automatically when the file is included
exe();
?>
Deixe index.php exatamente como ela é e você deve ver a saída que você está tentando alcançar.