Debugowanie z var_dump

🎯 Po tej lekcji podejrzysz zawartość dowolnej zmiennej i odczytasz jej typ, używając var_dump, print_r i var_export.

Każdy programista spędza sporo czasu zadając sobie pytanie: „Co teraz kryje ta zmienna?" PHP ma do tego trzy funkcje: var_dump, print_r i var_export. Każda nieco inna — czas poznać, kiedy po którą sięgnąć.

var_dump — król debugowania

var_dump wypisuje typ i wartość każdej zmiennej. To Twoje pierwsze narzędzie do debugowania:

<?php
declare(strict_types=1);

$imie    = 'Ola';
$wiek    = 25;
$cena    = 19.99;
$aktywny = true;
$notatka = null;

var_dump($imie);    // string(3) "Ola"
var_dump($wiek);    // int(25)
var_dump($cena);    // float(19.99)
var_dump($aktywny); // bool(true)
var_dump($notatka); // NULL

var_dump czyta się w schemacie: typ(rozmiar) wartość. Przy stringu string(3) "Ola"3 to liczba bajtów. Przy int i float rozmiaru nie ma.

Możesz też przekazać kilka zmiennych naraz:

<?php
declare(strict_types=1);

$x = 10;
$y = 3.14;
var_dump($x, $y);
// int(10)
// float(3.14)

var_dump dla tablic i zagnieżdżonych struktur

var_dump błyszczy przy tablicach — pokazuje typ i wartość każdego elementu:

<?php
declare(strict_types=1);

$ksiazka = [
    'tytul'  => 'Władca Pierścieni',
    'strony' => 1178,
    'dostepna' => true,
];

var_dump($ksiazka);
/*
array(3) {
  ["tytul"]=>
  string(19) "Władca Pierścieni"
  ["strony"]=>
  int(1178)
  ["dostepna"]=>
  bool(true)
}
*/

print_r — czytelna struktura bez typów

print_r wypisuje strukturę danych w bardziej przyjaznym formacie — ale bez informacji o typach:

<?php
declare(strict_types=1);

$produkty = ['jabłka', 'gruszki', 'śliwki'];

print_r($produkty);
/*
Array
(
    [0] => jabłka
    [1] => gruszki
    [2] => śliwki
)
*/

Porównaj z var_dump:

<?php
declare(strict_types=1);

$aktywny = true;

echo $aktywny;        // wynik: 1         ← echo wypisuje tylko wartość
print_r($aktywny);    // wynik: 1         ← print_r też nie pokazuje typu
var_dump($aktywny);   // wynik: bool(true) ← var_dump pokazuje typ!

print_r jest przydatne, gdy chcesz szybko podejrzeć strukturę dużej tablicy lub obiektu bez zaśmiecania ekranu informacjami o typach.

Przechwytywanie wyniku print_r do stringa

print_r ma opcjonalny drugi parametr true, który zamiast wypisywać — zwraca wynik jako string:

<?php
declare(strict_types=1);

$dane = ['Ola', 'Kuba', 'Marta'];

$tekst = print_r($dane, true);  // zwraca string, nic nie wypisuje
echo 'Dane: ' . $tekst;

var_export — wynik jako poprawny kod PHP

var_export wypisuje wartość jako poprawny kod PHP — wynik możesz wkleić z powrotem do skryptu i zadziała:

<?php
declare(strict_types=1);

$config = [
    'debug'   => true,
    'wersja'  => '2.0',
    'limit'   => 100,
];

var_export($config);
/*
array (
  'debug' => true,
  'wersja' => '2.0',
  'limit' => 100,
)
*/

Zwróć uwagę: var_export pisze true (nie 1 jak print_r), i '2.0' (z cudzysłowami — poprawna składnia PHP).

Tak jak print_r, var_export też przyjmuje true jako drugi parametr:

<?php
declare(strict_types=1);

$tablica = [1, 2, 3];
$kod = var_export($tablica, true);
echo $kod; // array ( 0 => 1, 1 => 2, 2 => 3, )

Zestawienie — kiedy co wybrać?

| Funkcja | Pokazuje typy? | Format | Kiedy używać | |---------|---------------|--------|-------------| | var_dump | Tak | Techniczny, kompletny | Debugowanie — gdy ważne są typy | | print_r | Nie | Czytelny dla człowieka | Podgląd struktury tablicy/obiektu | | var_export | Tak (składnia PHP) | Poprawny kod PHP | Serializacja, generowanie konfiguracji |

<?php
declare(strict_types=1);

$uzytkownik = [
    'imie'   => 'Kuba',
    'wiek'   => 28,
    'premium' => true,
    'kod'    => null,
];

// var_dump — widzisz typy każdego pola
var_dump($uzytkownik);

// print_r — widzisz strukturę, bez typów
print_r($uzytkownik);

// var_export — widzisz gotowy kod PHP
var_export($uzytkownik);
💡 Rada: W codziennej pracy najczęściej używaj var_dump — dostarcza najwięcej informacji. Gdy za chwilę zrozumiesz tablice i obiekty, docenisz go jeszcze bardziej. print_r przyda się, gdy chcesz pokazać strukturę komuś innemu (bo wynik jest czytelniejszy dla ludzi).
⚠️ Pamiętaj o usunięciu z produkcji: var_dump, print_r i var_export to narzędzia deweloperskie. Nie zostawiaj ich w kodzie produkcyjnym — ujawniają strukturę danych aplikacji i mogą stanowić lukę bezpieczeństwa.

Funkcje w tej lekcji

Sprawdź się

Co wypisze var_dump(true)?

Czym różni się print_r od var_dump?

Jak sprawić, by print_r zwróciło string zamiast wypisywać wynik?

Do czego służy var_export?

Ćwiczenie

Utwórz tablicę $produkt = ['nazwa' => 'Kawa', 'cena' => 12.50, 'dostepny' => true]. Wypisz ją za pomocą wszystkich trzech funkcji: var_dump, print_r i var_export. Zwróć uwagę na różnice w wypisywaniu bool i float.

Pokaż rozwiązanie
<?php
declare(strict_types=1);

$produkt = [
    'nazwa'     => 'Kawa',
    'cena'      => 12.50,
    'dostepny'  => true,
];

echo "=== var_dump ===\n";
var_dump($produkt);

echo "\n=== print_r ===\n";
print_r($produkt);

echo "\n=== var_export ===\n";
var_export($produkt);