В дополнение к моему предыдущему вопросу , каков наилучший подход, когда я хочу буферизовать вывод PHP до тех пор, пока не выполнил всю обработку? Я хочу буферизировать, чтобы оставить возможность перенаправления на страницу с ошибкой, которую я не могу сделать после выхода.
Итак, что такое лучшая практика? Используйте переменную $output
и продолжайте добавлять к ней, а затем выведите ее в конце? Или используйте ob_str () и т. Д.?
Есть ли выбор, чтобы выбрать причину для восстановления кода для одного над другим? Или это просто личное предпочтение?
Для меня я сделал это:
<?php ob_start(); //do your process here if($error) { ob_end_clean(); header('Location: /some/path.php'); exit; } ob_end_flush(); ?>
Я открываю буфер с помощью ob_start();
( http://php.net/manual/en/function.ob-start.php )
Тогда все, что обычно отправляется в браузер (кроме заголовков), сохраняется в буфере, пока я его не закрою. Когда я хочу выводить или манипулировать буфером, я обращаюсь к нему следующим образом:
$buffer = ob_get_clean();
( http://php.net/manual/en/function.ob-get-clean.php )
Здесь есть много других вариантов буферов:
http://www.php.net/manual/en/ref.outcontrol.php
Это лучший способ, на мой взгляд, потому что вам не нужно добавлять элементы в буфер; PHP автоматически захватывает все, пока буфер открыт.
Хорошо написанный код не нуждается в буферизации вывода. Под этим я подразумеваю: во-первых, вы делаете всю свою обработку без вывода. Бизнес-логика, валидация, доступ к базе данных – такой материал. После этого вы можете закрыть соединение с БД, сеанс и т. Д., Потому что все, что вы делаете, это создание вашего вывода на основе данных, собранных выше.
Этот метод обычно приводит к значительно лучшему поддерживаемому коду.