Reputation: 8995
I have a function ( DoDb::printJsonDG($sql, $db, 1000, 2)
) which echos json. I have to catch it and then use str_replace() before it is send to the user. However I cannot stop it from doing echo. I don't want to change printJsonDG because it is being used in several other locations.
Upvotes: 23
Views: 24659
Reputation: 22773
Perhaps you can refactor DoDb
:
class DoDb
{
public static function getJsonDG( $some, $parameters )
{
/*
original routine from printJsonDG without the print statement
*/
return $result;
}
public static function printJsonDG( $some, $parameters )
{
print self::getJsonDG( $some, $parameters );
}
}
That way you don't have to touch the code elsewhere in you application.
Upvotes: 4
Reputation: 14091
You can do it by using output buffering functions.
ob_start();
/* do your echoing and what not */
$str = ob_get_contents();
/* perform what you need on $str with str_replace */
ob_end_clean();
/* echo it out after doing what you had to */
echo $str;
Upvotes: 12
Reputation: 47001
Check out output buffering, but I'd rather change the function now that it seems it'll be used for two things. Simply returning the string would be best.
Upvotes: 1
Reputation: 1017
You can use the ob_start()
and ob_get_contents()
functions in PHP.
<?php
ob_start();
echo "Hello ";
$out1 = ob_get_contents();
echo "World";
$out2 = ob_get_contents();
ob_end_clean();
var_dump($out1, $out2);
?>
Will output :
string(6) "Hello "
string(11) "Hello World"
Upvotes: 59