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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top