function inner() { $buf = new \Buffering\Output(); echo "Этот текст попадет в буфер."; return "<b>{$buf->__toString()}</b>"; // Не нужно заботиться о ручном вызове ob_end_clean() - // это автоматически делает деструктор объекта $buf! }
<?php ## Корректность \Buffering\Output::__toString(). spl_autoload_register(); // Перехватываем выходной поток в программе. $h1 = new \Buffering\Output(); // Выводим некоторый текст. echo "Текст в первом буфере."; // Еще раз перехватываем выходной поток (вложенным образом). $h2 = new \Buffering\Output(); // Выводим другой текст текст. echo "Текст во втором буфере."; // Теперь сохраняем в переменных, что было накоплено в буферах. $first = $h1->__toString(); $second = $h2->__toString(); // Уничтожаем второй буфер. $h2 = null; // Уничтожаем первый буфер. $h1 = null; // Выводим сохраненный ранее текст. echo "1: {$first}<br />"; echo "2: {$second}<br />";