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()пишет напрямую в вывод и не возвращает ничего для присвоения.
Базовый пример
Здесь $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 | Пример вывода |
|---|---|
| integer | int(42) |
| float | float(3.14) |
| string | string(5) "hello" |
| boolean | bool(true) |
| null | NULL |
| array | array(2) { ... } |
| object | object(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() сложно превзойти.