Как предотвратить эхо в PHP и поймать, что внутри?

У меня есть функция (DoDb::printJsonDG($sql, $db, 1000, 2)), которая echos json. Я должен поймать его, а затем использовать str_replace(), прежде чем он отправит пользователю. Однако я не могу остановить его от эха. Я не хочу изменять printJsonDG, потому что он используется в нескольких других местах.

Ответы

Ответ 1

Вы можете использовать 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"

Ответ 2

Вы можете сделать это, используя функции буферизации вывода.

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;

Ответ 3

Возможно, вы можете реорганизовать 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 );
    }
}

Таким образом, вам не нужно прикасаться к коду в другом месте вашего приложения.

Ответ 4

Отметьте выходную буферизацию, но я бы скорее изменил функцию сейчас, поскольку, похоже, она будет использоваться для двух вещей. Простое возвращение строки было бы лучше.