Как предотвратить эхо в PHP и поймать, что внутри? - PullRequest
16 голосов
/ 17 августа 2011

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

Ответы [ 4 ]

46 голосов
/ 17 августа 2011

Вы можете использовать функции 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"
5 голосов
/ 17 августа 2011

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

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;
4 голосов
/ 17 августа 2011

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

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

1 голос
/ 17 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...