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);
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).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)?
var_dump zawsze pokazuje typ i wartość. Dla true wypisze bool(true). Gdybyś użył echo lub print_r, zobaczyłbyś tylko '1'.
Czym różni się print_r od var_dump?
print_r daje czytelny widok struktury (bez typów), var_dump pokazuje typ każdego elementu. var_dump jest lepszy do debugowania typów.
Jak sprawić, by print_r zwróciło string zamiast wypisywać wynik?
print_r($zmienna, true) zwraca wynik jako string zamiast go wypisywać — przydatne do zapisywania do logu lub zwracania przez funkcję.
Do czego służy var_export?
var_export wypisuje wartość jako poprawny kod PHP (np. true zamiast 1, 'tekst' zamiast tekst). Z parametrem true zwraca string.
Ć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);