Translate: 
EnglishFrenchGermanItalianPolishPortugueseRussianSpanish

Kolorowy var_dump()

Często podczas programowania potrzebujemy wyświetlić na zawartość jakiejś zmiennej w celu jej zdebugowania. W takim przypadku bardzo przydatną mechanizmem wbudowanym w język PHP okazuje się funkcja var_dump(). Jej główną zaletą w porównaniu do innych funkcji tego typu (jak print_r(), czy var_export()) jest to, że wyświetla ona nie tylko wartość zmiennej, lecz także rodzaj typów w niej przechowywanych.

Funkcja ta ma niestety jedną dokuczliwą wadę, przy dużej ilości danych (rozbudowany array / obiekt) prezentowany wynik potrafi być bardzo nieczytelny.

W tym celu napisałem niewielką klasę, która dodaje do polecenia var_dump() kolorowanie wyników.

Skąd pobrać?

nominacja 9 miejsce

Gotowy skrypt można pobrać z serwisu softpedia (bez logowania), lub phpclasses (wymaga zalogowania)

Jak to działa?

Oczywiście funkcję symulującą działanie var_dump() mógłbym napisać od podstaw w czystym języku PHP, doszedłem jednak do wniosku, że nie należy ponownie wynajdywać koła, szczególnie że chodzi tylko o funkcję pomocniczą.

Ograniczyłem się więc do wykorzystania już istniejącego mechanizmu var_dump(), przechwytując jego wyjście funkcją ob_start(), a następnie przepisując wynik do języka HTML przy pomocy wyrażeń regularnych.

Sposób użycia

W pierwszej kolejności należy oczywiście zaincludować skrypt do programu głównego. Dzięki temu do wyświetlenia zawartości zmiennych udostępniona zostanie metoda dump().

Oto przykładowy skrypt wyświetlający tablicę $_SERVER oraz $_GET:

<?php 
include('./dumper.php');
dump($_SERVER, $_GET);

Jak widać funkcja dump() przyjmuje dowolną liczbę argumentów wejściowych, tak jak ma to miejsce w przypadku oryginalnego polecenia var_dump().

Oto przykładowy urywek z wyniku operacji:

array(32) {
  ["HTTP_HOST"]=>
  string(9) "localhost"
  ["HTTP_USER_AGENT"]=>
  string(85) "Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"
  ["HTTP_ACCEPT"]=>
  string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
  ["HTTP_ACCEPT_LANGUAGE"]=>
  string(23) "pl,en-us;q=0.7,en;q=0.3"
  ["HTTP_ACCEPT_ENCODING"]=>
  string(12) "gzip,deflate"
  ["HTTP_ACCEPT_CHARSET"]=>
  string(30) "ISO-8859-2,utf-8;q=0.7,*;q=0.7"
  ["HTTP_KEEP_ALIVE"]=>
  string(3) "115"
  ["HTTP_CONNECTION"]=>
  string(10) "keep-alive"
...

W tym przypadku domyślną kolorystykę zaczerpnąłem z funkcji highlight_string(), nic nie stoi jednak na przeszkodzie, by zmienić kolory na własne, poprzez wywołanie metody Dumper::setColors() (dokumentację tej oraz wszystkich innych metod można znaleźć w kodzie klasy PHP).

Uwagi końcowe

Użycie wyrażeń regularnych niesie ze sobą trzy konsekwencje:

  • negatywnie wpływa na wydajność
  • zmniejsza czytelność kodu
  • zwiększa zużycie pamięci (operuje na całym stringu wynikowym)

W przypadku operacji debugujących jest to na szczęście pomijalne, gdyż na środowisku developerskim wydajność nie jest tak ważna, jak na produkcji.

Tagi:

Dodaj odpowiedź