W3docs

var_dump()

var_dump() — встроенная функция PHP, которая выводит тип, длину и значение переменной. Незаменима при отладке.

Введение

var_dump() — встроенная функция отладки PHP, которая выводит структурированную информацию об одной или нескольких переменных — включая тип, длину и содержимое каждого значения — непосредственно в выходной поток. В отличие от echo, который просто печатает значение, var_dump() показывает точно какого рода значение вы видите, что делает её самым быстрым способом ответить на вопрос «почему это не работает?» в процессе разработки.

На этой странице описаны синтаксис, отображение каждого типа PHP, работа с массивами и объектами, отличия от связанных функций — print_r() и var_export() — а также подводные камни, о которых стоит знать.

Синтаксис

var_dump(mixed $value, mixed ...$values): void
  • $value — переменная или выражение для анализа.
  • ...$values — любое количество дополнительных значений; каждое выводится по порядку.
  • Возвращаемое значение: ничего (void). var_dump() пишет напрямую в вывод и не возвращает ничего для присвоения.

Базовый пример

php— editable, runs on the server

Здесь $var1 — целое число, $var2 — строка, а $array — массив. Вывод сообщает тип и значение каждой переменной:

int(10)
string(13) "Hello, world!"
array(3) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(6) "banana"
  [2]=>
  string(6) "cherry"
}

Читайте вывод внимательно — он содержит больше деталей, чем echo:

  • int(10) — значение является целым числом 10.
  • string(13) "Hello, world!" — строка длиной 13 байт. Длина помогает обнаружить скрытые пробелы или проблемы с кодировкой.
  • Для массива каждая строка [ключ]=> показывает ключ, а затем тип и значение элемента под ним.

Как отображается каждый тип

var_dump() форматирует каждый скалярный тип по-своему, что делает её более информативной, чем обычная печать значения. Таблица суммирует нотацию:

Тип PHPПример вывода
integerint(42)
floatfloat(3.14)
stringstring(5) "hello"
booleanbool(true)
nullNULL
arrayarray(2) { ... }
objectobject(ClassName)#1 (2) { ... }

Случаи с boolean и NULL — те, на которые разработчики полагаются чаще всего. echo true печатает 1, а echo false / echo null не печатают ничего, поэтому с помощью echo невозможно отличить false, null и "" друг от друга — но var_dump() показывает их чётко:

<?php
var_dump(true);
var_dump(false);
var_dump(null);
var_dump("");
var_dump(0);
var_dump("0");
?>
bool(true)
bool(false)
NULL
string(0) ""
int(0)
string(1) "0"

Обратите внимание, как var_dump() различает целое число 0 и строку "0" — различие, которое незаметно вызывает ошибки при нестрогих сравнениях. См. Типы данных PHP и gettype() для получения дополнительной информации о проверке типов.

Вывод объектов и вложенных структур

var_dump() рекурсивно обходит объекты и вложенные массивы, показывая область видимости (public / protected / private) каждого свойства:

<?php
class User {
    public string $name = "Ada";
    protected int $age = 36;
    private array $roles = ["admin", "editor"];
}

var_dump(new User());
?>
object(User)#1 (3) {
  ["name"]=>
  string(3) "Ada"
  ["age":protected]=>
  int(36)
  ["roles":"User":private]=>
  array(2) {
    [0]=>
    string(5) "admin"
    [1]=>
    string(6) "editor"
  }
}

#1 — это внутренний идентификатор экземпляра объекта, а (3) — количество свойств.

Вывод нескольких значений за раз

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

<?php
$id    = 7;
$name  = "Grace";
$active = true;

var_dump($id, $name, $active);
?>
int(7)
string(5) "Grace"
bool(true)

var_dump() vs. print_r() vs. var_export()

Эти три функции пересекаются по функциональности, поэтому важно выбрать подходящую:

ФункцияПоказывает типы?Вывод — валидный PHP?Лучше всего для
var_dump()ДаНетОтладка — максимум деталей
print_r()НетНетЧитаемый, удобный для человека вид
var_export()НетДаГенерация кода / дампов конфигурации

Используйте var_dump(), когда нужно видеть точные типы и длины. Прибегайте к print_r(), когда хотите быстро и без лишнего шума взглянуть на структуру массива, а к var_export() — когда нужен вывод, который можно вставить обратно в исходный код.

Захват вывода в виде строки

var_dump() ничего не возвращает, поэтому нельзя написать $x = var_dump($y). Чтобы захватить её вывод (например, для записи в лог), оберните вызов в буферизацию вывода:

<?php
$data = ["status" => 200, "ok" => true];

ob_start();
var_dump($data);
$dump = ob_get_clean();

// $dump now holds the var_dump output as a string
echo strlen($dump) . " characters captured\n";
?>

Примечания и подводные камни

  • Назначение вывода. var_dump() пишет в стандартный вывод. При запуске в браузере современный PHP оборачивает дамп в теги <pre>, чтобы структура была читаемой; в командной строке выводится обычный текст.
  • Забытые вызовы попадают в продакшн. Случайно оставленный var_dump() в коде передаст внутренние данные пользователям. Удаляйте отладочные вызовы перед развёртыванием или скрывайте их за флагом отладки.
  • Строки показывают длину в байтах, а не в символах. string(13) считает байты; многобайтовая строка (UTF-8) может показывать число большее, чем количество видимых символов.
  • Используйте Xdebug для более удобного вывода. С установленным расширением Xdebug функция var_dump() автоматически перегружается для вывода цветного, ограниченного по глубине результата, который значительно удобнее просматривать.

Заключение

var_dump() — первоочередная функция для проверки того, чем на самом деле является значение в процессе разработки на PHP. Она раскрывает тип, длину, структуру и область видимости за один вызов — детали, которые скрывают обычные echo и print. Прибегайте к print_r(), когда хотите более чистое представление массива, и к var_export(), когда нужен переиспользуемый PHP-код, но для сырой отладки var_dump() сложно превзойти.

Практика

Практика
Какова цель функции var_dump() в PHP?
Какова цель функции var_dump() в PHP?
Was this page helpful?