захватывая эхо в переменную - PullRequest
28 голосов
/ 22 апреля 2009

Я вызываю функции, используя имена динамических функций (что-то вроде этого)

$unsafeFunctionName = $_POST['function_name'];
$safeFunctionName   = safe($unsafeFunctionName); // custom safe() function

Затем я хочу обернуть некоторые xml вокруг возвращаемого значения функции (что-то вроде этого):

// xml header etc already created
$result = "<return_value>" . $safeFunctionName() . "</return_value>";

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

Не совсем уверен, с чего начать ~ любые идеи?

Ответы [ 3 ]

67 голосов
/ 22 апреля 2009

Позвольте мне предсказать это, сказав:

Будьте осторожны с этой пользовательской функцией, вызывающей бизнес. Я предполагаю, что вы знаете, насколько это может быть опасно, поэтому вы как-то его чистите.

В прошлом то, что вы хотите, известно как выходная буферизация :

function hello() {
    print "Hello World";
}
ob_start();
hello();
$output = ob_get_clean();
print "--" . $output . "--";

(я добавил тире, чтобы показать, что сначала она не печатается)

Выше будет выводить --Hello World--

13 голосов
/ 22 апреля 2009

PHP: ob_get_contents

ob_start(); //Start output buffer
echo "abc123";
$output = ob_get_contents(); //Grab output
ob_end_clean(); //Discard output buffer
1 голос
/ 22 апреля 2009

Чтобы использовать выходное значение, если оно присутствует, или возвращаемое значение, если нет, вы можете просто изменить свой код следующим образом:

ob_start();
$return_val = $safeFunctionName();
$echo_val = ob_get_clean();
$result = "<return_value>" . (strlen($echo_val) ? $echo_val : $return_val) . "</return_value>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...