Выход из скрипта PHP на другой странице PHP - PullRequest
1 голос
/ 11 февраля 2009

Я пытаюсь реализовать кэширование для сценария PHP, который я пишу, но продолжаю сталкиваться со следующей проблемой. Я хочу, чтобы скрипт был включен в другие страницы PHP, но когда я пытаюсь передать кэшированный файл и выйти из встроенного скрипта, он выходит из скрипта и родительской страницы, но не анализирует остальную часть кода на родительской странице , См. Код ниже для примера.


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
?>


Если приведенный выше файл index.php выполнен, вы получите следующий вывод:

Hello World! 
file2.php has been included

Однако я пытаюсь, чтобы это выглядело так:

Hello World! 
file2.php has been included
This line will not be printed

Ответы [ 4 ]

3 голосов
/ 11 февраля 2009

Используйте return; вместо exit; во включенном файле - это только остановит выполнение этого скрипта.

Обратите внимание, что вы также используете это для возврата значения в родительский скрипт, например,

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';
2 голосов
/ 11 февраля 2009

Просто заключите «дополнительный код здесь» в оператор else?

<?php
  $whatever = true;

  if ($whatever == true) {
    echo "file2.php has been included<br />";
  } else {
    // Additional code here
  }
?>

Иначе я не уверен, к чему ты клонишь. Команда exit всегда завершает текущее выполнение целиком, а не только выполнение текущего файла (для которого нет команды)

EDIT

Благодаря комментариям и сообщениям PHLAK, Tomhaigh, MichaelM и Mario я сам сегодня кое-что узнал - что вы CAN действительно прекращаете выполнение одного включенного файла с return команда. Спасибо, ребята!

1 голос
/ 11 февраля 2009

Лично я стараюсь избегать условий if-else, где это возможно, и использую (не уверен, что для этого есть придуманный термин, но) условия перехвата раннего выхода.

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.
...
...
?>
1 голос
/ 11 февраля 2009

Почему бы не инкапсулировать содержимое file2.php в функцию. Таким образом, вы можете вернуться из функции, когда вам нужно, и остальная часть выполнения не остановится. например:

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

Оставьте index.php точно таким, какой он есть, и вы должны увидеть результат, который пытаетесь достичь.

...