Я хотел бы захватить вывод var_dump
строки.
Документация PHP говорит;
Как и для всего, что выводит свой результат непосредственно в браузер, функции управления выводом можно использовать для захвата вывода этой функции и сохранения его в виде строки (например).
Что может быть примером того, как это может работать?
print_r()
Это недопустимая возможность, потому что она не даст мне ту информацию, которая мне нужна.
strip_tags()
, это просто вернет тип и значение.Пытаться
var_export
Возможно, вы захотите проверить
var_export
- хотя он не обеспечивает тот же вывод, какvar_dump
он предоставляет второй$return
параметр, который заставит его возвращать свой вывод, а не печатать его:Почему?
Я предпочитаю этот однострочник для использования
ob_start
иob_get_clean()
. Я также считаю, что вывод немного проще для чтения, так как это всего лишь код PHP.Разница между
var_dump
иvar_export
заключается в том, что онаvar_export
возвращает «синтаксическое представление переменной для переменной», в то время какvar_dump
просто выводит информацию о переменной. На практике это означает, чтоvar_export
вы получаете корректный PHP-код (но, возможно, не достаточно много информации о переменной, особенно если вы работаете с ресурсами ).Демо-версия:
Разница в выходе:
var_export (
$debug_export
в приведенном выше примере):var_dump (
$debug_dump
в приведенном выше примере):print_r (
$debug_printr
в приведенном выше примере):Предостережение:
var_export
не обрабатывает циклические ссылкиЕсли вы пытаетесь сбросить переменную с циклическими ссылками, вызов
var_export
вызовет предупреждение PHP:Результаты в:
Оба,
var_dump
иprint_r
, с другой стороны, будут выводить строку*RECURSION*
при обнаружении циклических ссылок.источник
int(1)
а var_export просто печатает1
.var_export
не на самом деле лучше для отладки , потому что вы не можете сделать поиск для браузера(int)
или (строка) `и т.д. Он также Mangles много информации в небольшом пространстве, просто попробуйте:var_export(''); var_export('\'');
. И самое главное, будьте готовы к PHP Фатальная ошибка: слишком глубокий уровень вложенности - рекурсивная зависимость? в C: \ path \ file.php в строке 75Вы также можете сделать это:
источник
print_r
где могу, но, к сожалению, иногда это не дает достаточно информации. Например, поскольку он преобразуется в строку, где он может, и тоfalse
и другоеnull
отображается как пустая строка. В тех случаях, когда я беспокоюсь о разнице между ними, я неохотно прибегаю кvar_dump
илиvar_export
.Вы также можете попробовать использовать эту
serialize()
функцию. Иногда это очень полезно для отладки.источник
error_log
нему, вам не следует использовать это решение, поскольку вывод serialize может содержать нулевые байты иerror_log
обрезать строки, содержащие нулевые байты .источник
Также
echo json_encode($dataobject);
может быть полезнымисточник
json_encode
не будет содержать все данныеvar_dump
(например, типы переменных).json_encode
выводит ту же информацию, чтоprint_R
и inly в другом формате.var_dump
. Он также заявил, чтоprint_R
предоставляет недостаточно информации для своих нужд. Нет реальной разницы в информации, которая предоставляетсяjson_encode
иprint_r
- только формат данных отличается. Учитывая это, еслиprint_r
не достаточно, так и естьjson_encode
. Пожалуйста, не жалуйтесь на понижение больше. Очевидно, это был не случайный клик, так что разберитесь с ним.Из руководства по PHP :
Итак, вот реальная возвращаемая версия PHP
var_dump()
, которая фактически принимает список аргументов переменной длины:источник
$argc
Чек здесь не требуется , и , возможно , неправильно , как указывал @hanshenrik, и как только вы отнимешь все , что вы на самом деле является добавлениеcall_user_func_array
иfunc_get_args
вызовы.Если вы хотите просмотреть содержимое переменной во время выполнения, подумайте об использовании реального отладчика, такого как XDebug. Таким образом, вам не нужно портить исходный код, и вы можете использовать отладчик, даже когда обычные пользователи посещают ваше приложение. Они не заметят.
источник
Вот полное решение как функция:
источник
Это может быть немного не по теме.
Я искал способ записать такую информацию в журнал Docker моего контейнера PHP-FPM и придумал приведенный ниже фрагмент. Я уверен, что это может быть использовано пользователями Docker PHP-FPM.
источник
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
Мне действительно нравятся
var_dump()
подробные выходные данные и я не был удовлетворен выходными даннымиvar_export()
илиprint_r()
, потому что они не давали столько информации (например, отсутствовал тип данных, отсутствовала длина).Чтобы написать безопасный и предсказуемый код, иногда полезно различать пустую строку и нулевую. Или между 1 и истинным. Или между нулем и ложью. Поэтому я хочу, чтобы мой тип данных в выводе.
Несмотря на полезность, я не нашел в существующих ответах простого и понятного решения для преобразования цветного вывода
var_dump()
в удобочитаемый вывод в строку без тегов html и включая все детали изvar_dump()
.Обратите внимание, что если у вас есть цвет
var_dump()
, это означает, что у вас установлен Xdebug, который переопределяет php по умолчаниюvar_dump()
для добавления цветов html.По этой причине я создал небольшое изменение, дающее именно то, что мне нужно:
Возвращает следующую красивую строку:
Надеюсь, это кому-нибудь поможет.
источник
С http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
ob_get_clean () может очищать только последние данные, введенные во внутренний буфер. Так что метод ob_get_contents будет полезен, если у вас есть несколько записей.
Из того же источника, что и выше:
источник
Длинная строка : просто используйте
echo($var);
вместоdump($var);
.Объект или массив :
var_dump('<pre>'.json_encode($var).'</pre>);'
источник