Intereting Posts
Как установить значение в NULL при использовании Zend_Db Разделить цикл PHP на 2 списка Добавление настраиваемых полей измерения для каждой настройки параметров для переменных продуктов Проверьте, нет ли заданного входного файла Laravel 4: две разные страницы просмотра для одного URI, основанного на статусе auth Laravel – Как получить Доверенные роли определенного пользователя MySQL, объединить два столбца Есть ли способ принудительно выполнить аутентификацию с помощью Zend_Auth? Создание excel из базы данных и отправка в виде вложения электронной почты Безопасно ли использовать миграции doctrine2 в производственной среде с symfony2 и php Передача переменной PHP в запрос MySQL Laravel от 5.3 до 5.4 отношений foreignKey issue file_get_Contents не отправит строки запроса в url, поэтому ничего не получает с помощью $ _GET Woocommerce получает текущую судоходную зону PHP GD Допустимый размер памяти исчерпан

Можно ли захватить вывод эха в PHP?

Поэтому у меня есть функция, такая как:

public static function UnorderedList($items, $field, $view = false){ if(count($items) > 0){ echo '<ul>'; foreach($items as $item){ echo '<li>'; if($view){ echo '<a href="'.$view.'id='.$item->sys_id.'" title="View Item">'.$item->$field.'</a>'; }else{ echo $item->$field; } echo '</li>'; } echo '</ul>'; }else{ echo '<p>No Items...</p>'; } } 

Эта функция перебирает некоторые элементы и отображает неупорядоченный список. Мне интересно, возможно ли, если захочу, захватить эхо-выход.

Я звоню, чтобы использовать эту функцию, делая что-то вроде:

 Render::UnorderedList(Class::getItems(), Class::getFields(), true); 

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

Благодаря!

Related of "Можно ли захватить вывод эха в PHP?"

Да, используя буферизацию вывода .

 <?php ob_start(); // Start output buffering Render::UnorderedList(Class::getItems(), Class::getFields(), true); $list = ob_get_contents(); // Store buffer in variable ob_end_clean(); // End buffering and clean up echo $list; // will contain the contents ?> 

Очень похоже на предыдущий ответ, но немного более краткий для моих целей:

 <?php ob_start(); // Start output buffering Render::UnorderedList(Class::getItems(), Class::getFields(), true); $list = ob_get_clean(); // Store buffer AND cleans it echo $list; // will contain the contents ?> 

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