print_r($array) wypisuje tablicę lub obiekt z kluczami i wartościami w czytelnej formie. var_dump($value) wypisuje tę samą strukturę oraz typ i długość każdej wartości. Używaj print_r, aby zobaczyć, co jest w tablicy, a var_dump, gdy musisz wiedzieć, czy wartość to "1", czy 1.
Porównaj oba wyniki dla admin: print_r nie wypisało nic po strzałce, a var_dump wypisało bool(false). Ta różnica to główny powód, by przy debugowaniu sięgać po var_dump.
print_r vs var_dump vs var_export
Te trzy funkcje pokazują te same dane z różną szczegółowością:
print_r | var_dump | var_export | |
|---|---|---|---|
| Pokazuje typy | nie | tak | jako literały PHP |
false, null, "" | nic nie wypisują | bool(false), NULL, string(0) "" | false, NULL, '' |
| Może zwrócić string | print_r($x, true) | nie | var_export($x, true) |
| Wynik to poprawny PHP | nie | nie | tak |
| Kilka wartości w jednym wywołaniu | nie | var_dump($a, $b) | nie |
print_r czyta się najłatwiej, var_dump jest najdokładniejsze, a var_export daje kod, który możesz wkleić z powrotem do pliku.
Wynik print_r jako string
Przekaż true jako drugi argument, a print_r zwróci tekst zamiast go wypisać. Tak zapisujesz tablicę do pliku logu albo umieszczasz ją w dłuższym komunikacie.
var_export($value, true) zwraca string w ten sam sposób. var_dump zawsze wypisuje, więc aby przechwycić jego wynik, potrzebujesz buforowania wyjścia: ob_start(); var_dump($x); $text = ob_get_clean();.
Ładne wypisanie tablicy w HTML przez pre
W przeglądarce złamania linii i spacje z print_r zlewają się w jedną długą linię, bo HTML ignoruje białe znaki. Otocz wynik znacznikiem <pre>, aby zachować układ. Uruchom to i spójrz na zakładkę Page.
htmlspecialchars ma znaczenie, gdy tylko dane mogą zawierać < albo &, na przykład dane od użytkownika: bez tego przeglądarka potraktowałaby ten tekst jak HTML. Dla danych wysyłanych do JavaScriptu lub API często najbardziej przydatna jest forma json_encode.
Kilka wartości naraz
var_dump przyjmuje dowolną liczbę argumentów i wypisuje każdy po kolei, co pozwala szybko porównać dwie wartości obok siebie.
Wynik pokazuje, dlaczego == uznaje je za równe, a === nie: jedna to string(2) "42", druga int(42).
Wypisywanie obiektów
Wszystkie trzy funkcje wypisują też obiekty. var_dump i print_r oznaczają właściwości prywatne i chronione ([label:Point:private]), co pomaga, gdy jakaś właściwość wydaje się brakować.
#1 w wyniku var_dump to identyfikator obiektu. Dwie zmienne, które pokazują ten sam identyfikator, wskazują ten sam obiekt.
Częsty błąd: echo na tablicy
echo zamienia argument na string. Tablica nie ma postaci tekstowej, więc PHP wypisuje słowo Array i zgłasza ostrzeżenie:
<?php
$colors = ["red", "green", "blue"];
echo $colors;
PHP wypisuje:
Warning: Array to string conversion in /home/index.php on line 3
Array
Wypisz zawartość jedną z powyższych funkcji albo połącz wartości sam:
implode służy do pokazania listy użytkownikowi, json_encode do logów i API, a print_r lub var_dump do twojego własnego debugowania.
Najczęściej zadawane pytania
Czym różni się var_dump od print_r?
print_r pokazuje klucze i wartości w krótkiej, czytelnej formie. var_dump pokazuje też typ i długość każdej wartości, na przykład string(3) "Ada" i bool(false), więc to jego używaj, gdy liczy się typ. print_r(false) nie wypisuje nic, a var_dump(false) wypisuje bool(false).
Jak dostać wynik print_r jako string?
Przekaż true jako drugi argument: $text = print_r($array, true); zwraca tekst zamiast go wypisywać, więc możesz zapisać go do logu przez error_log($text) albo umieścić w zmiennej. var_export($value, true) działa tak samo; var_dump nie ma takiej opcji.
Jak ładnie wypisać tablicę w przeglądarce?
Otocz wynik znacznikiem <pre>, żeby przeglądarka zachowała złamania linii i wcięcia: echo '<pre>' . print_r($array, true) . '</pre>';. Escapuj przez htmlspecialchars, jeśli dane mogą zawierać HTML.
Dlaczego echo na tablicy wypisuje Array?
echo zamienia argument na string, a tablica zamienia się na słowo Array z ostrzeżeniem „Array to string conversion”. Aby wypisać zawartość, użyj print_r, var_dump, implode(', ', $arr) albo json_encode($arr).
Co robi var_export w PHP?
Wypisuje wartość jako poprawny kod PHP, na przykład array ( 0 => 'a', ), który możesz wkleić z powrotem do skryptu. Z true jako drugim argumentem zwraca kod jako string, i tak niektóre narzędzia zapisują pliki konfiguracji w pamięci podręcznej.