PHP: Подавить вывод в функции? - PullRequest
31 голосов
/ 28 января 2009

Какой самый простой способ подавить любой вывод, который может произвести функция? Скажи, что у меня есть:

function testFunc() {
    echo 'Testing';
    return true;
}

И я хочу вызвать testFunc () и получить его возвращаемое значение без отображения «Testing» на странице. Предполагая, что это будет в контексте другого кода, который выводит , выводит другие вещи, есть ли хороший способ сделать это? Может возиться с выходным буфером?

Ответы [ 4 ]

58 голосов
/ 28 января 2009

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

function foo() {
  echo "Flush!";
  return true;
}

ob_start();
$a = foo();
ob_end_clean();

И вывод не генерируется.

10 голосов
/ 28 января 2009

Вот, пожалуйста:

ob_start();
testFunc();
ob_end_clean();

"ob" означает "буферизация вывода", посмотрите страницы справочника здесь: http://www.php.net/outcontrol

3 голосов
/ 28 января 2009

Да, вы на правильном пути в отношении использования функций буферизации вывода PHP, то есть ob_start и ob_end_clean (посмотрите их на php.net):

<?php
  function testFunc() {
    echo 'Testing';
    return true;
  }

    ob_start();
    $output = testFunc();
    ob_end_clean();

    echo $output;
?>
0 голосов
/ 28 января 2009

Разве это не так просто, как применить некоторые условия к вашему коду?

Я имею в виду, если переменная = тестирование, то вывод, иначе нет?

Для функций, результаты которых выводят непосредственно в браузер, например, EVAL, вы можете записать результат в ob_start.

...