Выходной буфер показывает "1" - PullRequest
1 голос
/ 02 марта 2011

У меня есть две функции:

core_function($atts) {
        (attributes)
        (core functions, a few loops, echoes, a lot of direct input)
    }

И вот так я отображаю свою функцию, используя буферизацию вывода (да, я должен ее использовать!).

display_function($atts) {
            (attributes)

                $output = ob_start();
                $output .= core_function($atts);
                $output .= ob_get_clean();

            return $output;
}

Все отличнохорошо, но return $ output показывает не только основные функции, но и «1» перед ними.Я понятия не имею, откуда взялась эта «1».Когда я удаляю ob_start ();и ob_get_clean ();это исчезает.Поэтому я считаю, что выходной буфер как-то добавляет эту цифруНо как и почему?Это необработанное «1», а не в абзаце и т. Д.

Нормальная функция display_function ($ atts) показывает, например:

<div>This is Core Function!</div>

И с буферизацией вывода она отображает:

1             <div>This is Core Function!</div>

Почему это происходит?Если это как-то связано с моими функциями, я говорю еще раз - цифра 1 отображается точно ДО всего содержимого.

1 Ответ

9 голосов
/ 02 марта 2011

Это не так, как работает буферизация вывода. ob_start возвращает TRUE или FALSE после завершения, поэтому вы объединяете кучу вещей, которые не следует объединять. (То же самое касается вашего вызова core_function).

display_function($atts) {
     (attributes)

     ob_start();
     core_function($atts);
     return ob_get_clean();
}

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

...