Різниця між var_dump, var_export та print_r


126

У чому різниця між var_dump, var_exportі print_r?


14
Іноді простіше попросити когось іншого зрозуміти краще, ніж читати посібники.
Діпак Ламіхан

11
@ Ваші відповіді на загальне чуття SO часто є більш чіткими, стислими, зрозумілими, а також завжди легшими для посилань, ніж посібник із PHP.
Марк Фокс

Відповіді:


194

var_dump призначений для налагодження. var_dumpзавжди друкує результат.

// var_dump(array('', false, 42, array('42')));
array(4) {
  [0]=> string(0) ""
  [1]=> bool(false)
  [2]=> int(42)
  [3]=> array(1) {[0]=>string(2) "42")}
}

print_r також призначений для налагодження, але не включає тип учасника. Це добре використовувати, якщо ви знаєте типи елементів у своєму масиві, але в іншому випадку можна ввести в оману. print_rза замовчуванням друкує результат, але дозволяє повертати як рядок замість цього за допомогою додаткового$returnпараметра.

Array (
    [0] =>
    [1] =>
    [2] => 42
    [3] => Array ([0] => 42)
)

var_export друкує дійсний код PHP. Корисно, якщо ви обчислили деякі значення і хочете, щоб результати були постійними в іншому сценарії. Зауважте, щоvar_exportне вдається обробити еталонні цикли / рекурсивні масиви, тоді якvar_dumpіprint_rперевірити їх. var_exportза замовчуванням друкує результат, але дозволяє повертати як рядок замість цього за допомогою додаткового$returnпараметра.

array (
  0 => '',
  1 => false,
  2 => 42,
  3 => array (0 => '42',),
)

Особисто я вважаю, що var_exportце найкращий компроміс лаконічного та точного.


51
Зауважте, що var_exportчерез свою природу загине жахлива рекурсивна смерть на ну рекурсивних масивах. print_rі var_dump(хоча, не зовсім впевнений у останньому, оскільки я його зазвичай не використовую) не має цього питання. Так не робіть var_export($_GLOBALS);, наприклад (який містить себе). :)
pinkgothic

@ftrotter Я завжди думав, що коментар пояснить цю цікавість добре, але ось ви додали коротку примітку до відповіді.
Фігаг

1
Слід додати, що ви можете змусити print_r () та var_export () повернути рядок, а не виводити її, тоді як var_dump () не може цього зробити. Крім того, мені не подобається var_export (), оскільки це заплутано - якщо ви спробуєте експортувати якусь невизначену константу SOMECONST, ви просто повернете текстовий рядок "SOMECONST". Так що він не скаже NULL, 0, "", але він насправді припустить, що це рядок (і я вважаю, що також киньте повідомлення).
userfuser

1
var_export хороший для безпечного подання рядка, як-от захист цитати / зворотної косої риски.
dkellner

1
Особисто я віддаю перевагу var_dumpвиходу. Шкода, що він не дозволяє повернути висновок у вигляді рядка. Як такий, я можу сказати про почуття @ iconoclast у коментарі вище. Але доводиться вибирати var_exportбільш var_dumpдля цього випадку використання є прийнятним для мене. Для повноти зверніть увагу на цей відповідний запит на функцію .
Пол ван Левен

3

var_dumpі var_exportстосуватися так (із посібника )

var_export () отримує структуровану інформацію про дану змінну. Він схожий на var_dump () з одним винятком: повернене представлення є дійсним PHP-кодом.

Вони відрізняються від print_rцього var_dumpекспорту додаткової інформації, як тип даних і розмір елементів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.