Possible to capture PHP echo output?

Chris picture Chris · Oct 12, 2010 · Viewed 16.3k times · Source

So I have a function such as:

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>';
    }
}

This function loops over some items and renders a unordered list. What I am wondering is if its possible to capture the echo output if I wish.

I make a call to use this function by doing something like:

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

And this will dump a unordered list onto my page. I Know I can just change echo to a variable and return the variable but I was just curious if its possible to capture echo output without modifying that function, merely modifying the call to the function in some way?

Thanks!

Answer

Pekka picture Pekka · Oct 12, 2010

Yes, using output buffering.

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