How to prevent echo in PHP and catch what it is inside?
I have a function ( DoDb::printJsonDG($sql, $db, 10开发者_如何学Go00, 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.
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"
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;
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.
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.
精彩评论