Intereting Posts
php update обновляет только последнюю запись PHP обратный к матрице Недопустимое разрешение команды php exec () PHP Twig: доступ к текущей переменной шаблона из макроса без передачи? Получить автоматически сгенерированный идентификатор после вставки Можете ли вы преобразовать вывод php crypt () в действительный MD5? Сравнение временных меток с переменной даты (MySQL и PHP) Echo / return добавляет пробелы перед переменной Laravel: Отсутствие расширения mcrypt только при использовании phpunit PHP Неустранимая ошибка: Загрузчик должен появиться в качестве первой записи в php.ini Как получить общее количество столбцов, если строки разбиты на страницы? CodeIgniter Две таблицы Left Join не возвращает идентификатор условия соединения левой таблицы при пропуске в правой таблице строка изменения в файле php Как динамически создавать имя переменной в цикле PHP? PHP: использование preg_replace с htmlentities

Буфер вывода показывает «1»

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

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; } 

Все отлично, но возврат $ 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 отображается точно перед всем содержимым.

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

 display_function($atts) { (attributes) ob_start(); core_function($atts); return ob_get_clean(); } 

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