Стек буферов вывода в PHP. Как управлять порядком отправки данных?

стек буферов вывода в php. как управлять порядком отправки данных?

Для чего нужен стек буферов

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

//простой пример использования стека буферов
ob_start();
echo 'Привет из первого буфера!';

ob_start();
echo 'Ты бодр и готов к учебе?';

ob_end_clean();
ob_end_flush();
/*
* Результат:
* Привет из первого буфера!
*/

Программный код покажет только одну фразу «Привет из первого буфера!». Однако мы видим две строки вывода, использующие echo. Объяснение кроется в том, что второй вызов функции ob_start() создает новый уровень стека буферов, который мы уничтожаем с помощью ob_end_clean(). Подробный разбор приводится ниже.

Вывод информации из стека

Вы уже знаете, что для создания нового буфера в PHP используется функция ob_start(). Каждый вызов ob_start() не уничтожает предыдущие буферы, а заставляет вывод информации копиться на новом вложенном уровне. При этом очень важно понимать, функции ob_end_flush() и ob_end_clean() влияют только на текущий уровень стека. Очистка уничтожит только тот слой данных, в котором вы сейчас находитесь, после будет осуществлен возврат к предыдущему. Это также означает, что вывод информации с помощью ob_end_flush() не вызывает моментальной отправки данных пользователю. Они будут дописаны в конец буфера лежащего на уровень выше.

//эффективный пример работы стека буферов
ob_start();
echo 'Это строка должна быть перовой';

ob_start();
echo 'Контент из второго уровня буфера';
ob_end_flush();

echo 'И ещё немного пустой болтовни';
ob_end_clean();

Пример, приведенный выше, не выводит никакой информации. В нем создается два уровня буфера. Содержимое второго буфера записывается в конец первого с помощью ob_end_flush(). Затем к выводу добавляется третья фраза и всё содержимое первого буфера обнуляется за счет ob_end_clean(). Это демонстрирует механизм работы стека буферов в PHP. ob_end_flush() не вызвал отправку данных пользователю, а дописал их в конец буфера, лежащего на уровень выше. Удалите последнюю строку, чтобы увидеть текст.

Последние публикации