У меня есть функция ( DoDb::printJsonDG($sql, $db, 1000, 2)
), которая echos json. Я должен поймать его, а затем использовать str_replace (), прежде чем он отправит пользователю. Однако я не могу остановить его от эха. Я не хочу менять printJsonDG, потому что он используется в нескольких других местах.
Вы можете использовать функции ob_start()
и ob_get_contents()
в PHP.
<?php ob_start(); echo "Hello "; $out1 = ob_get_contents(); echo "World"; $out2 = ob_get_contents(); ob_end_clean(); var_dump($out1, $out2); ?>
Вывод:
string(6) "Hello " string(11) "Hello World"
Вы можете сделать это, используя функции буферизации вывода.
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;
Возможно, вы можете реорганизовать 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 ); } }
Таким образом, вам не нужно прикасаться к коду в другом месте вашего приложения.
Проверьте выходную буферизацию , но я предпочел бы изменить функцию сейчас, поскольку, похоже, она будет использоваться для двух вещей. Просто вернуть строку было бы лучше.