Chciałbym uchwycić wyjście var_dump
do ciągu.
Dokumentacja PHP mówi;
Podobnie jak w przypadku wszystkiego, co wysyła wynik bezpośrednio do przeglądarki, funkcje kontroli wyjścia mogą być wykorzystane do przechwycenia wyniku tej funkcji i zapisania go w ciągu (na przykład).
Jaki byłby przykład tego, jak to może działać?
print_r()
nie jest prawidłową możliwością, ponieważ nie dostarczy mi potrzebnych informacji.
strip_tags()
, to po prostu zwróci typ i wartość.Próbować
var_export
Możesz to sprawdzić
var_export
- chociaż nie zapewnia tego samego wyniku, ponieważvar_dump
zapewnia drugi$return
parametr, który spowoduje, że zwróci on wynik, zamiast go wydrukować:Dlaczego?
Wolę ten jednowarstwowy od używania
ob_start
iob_get_clean()
. Uważam również, że wynik jest nieco łatwiejszy do odczytania, ponieważ jest to po prostu kod PHP.Różnica między
var_dump
ivar_export
polega na tym, żevar_export
zwraca „reprezentatywny ciąg znaków zmiennej”, avar_dump
po prostu zrzuca informacje o zmiennej. W praktyce oznacza to, żevar_export
daje ci prawidłowy kod PHP (ale może nie dawać ci tyle informacji o zmiennej, szczególnie jeśli pracujesz z zasobami ).Próbny:
Różnica w wydajności:
var_export (
$debug_export
w powyższym przykładzie):var_dump (
$debug_dump
w powyższym przykładzie):print_r (
$debug_printr
w powyższym przykładzie):Zastrzeżenie:
var_export
nie obsługuje referencji okrągłychJeśli próbujesz zrzucić zmienną z referencjami cyklicznymi, wywołanie
var_export
spowoduje ostrzeżenie PHP:Prowadzi do:
Zarówno , jak
var_dump
iprint_r
, z drugiej strony, wyprowadzi ciąg,*RECURSION*
gdy napotka okrągłe odwołania.źródło
int(1)
podczas gdy var_export po prostu wydrukuje1
.var_export
nie jest lepsza do debugowania, ponieważ nie można zrobić wyszukiwania przeglądarki,(int)
lub (string) `i itd. To również Mangles a lot informacji w małej przestrzeni, po prostu spróbuj:var_export(''); var_export('\'');
. A co najważniejsze, przygotuj się na błąd krytyczny PHP: zbyt głęboki poziom zagnieżdżenia - zależność rekurencyjna? w C: \ ścieżka \ plik.php w linii 75Możesz także to zrobić:
źródło
print_r
co mogę, ale niestety czasami nie zapewnia wystarczającej ilości informacji. Na przykład, ponieważ rzutuje na ciąg tam, gdzie może, zarównofalse
inull
pokazuje się jako pusty ciąg. W przypadkach, w których zależy mi na różnicy między nimi, niechętnie skorzystam zvar_dump
lubvar_export
.Możesz także spróbować użyć tej
serialize()
funkcji. Czasami jest to bardzo przydatne do celów debugowania.źródło
error_log
, nie powinieneś używać tego rozwiązania, ponieważ dane wyjściowe serialize mogą zawierać bajty puste ierror_log
obcinać ciągi zawierające bajty puste .źródło
Również
echo json_encode($dataobject);
może być pomocneźródło
json_encode
nie będzie zawierać wszystkich danychvar_dump
(na przykład typów zmiennych).json_encode
wypisuje te same informacje, coprint_R
w innym formacie.var_dump
. Stwierdził również, żeprint_R
zapewnia on niewystarczające informacje dla jego potrzeb. Nie ma prawdziwej różnicy w informacjach dostarczanych przezjson_encode
iprint_r
- tylko format danych jest inny. Biorąc to pod uwagę, jeśliprint_r
jest niewystarczające, tak też jestjson_encode
. Proszę nie narzekać już na głosowanie negatywne. Oczywiście nie było to zwykłe kliknięcie, więc sobie z tym poradzić.Z podręcznika PHP :
Oto prawdziwa zwracana wersja PHP
var_dump()
, która akceptuje listę argumentów o zmiennej długości:źródło
$argc
Sprawdzić tutaj jest niepotrzebne i prawdopodobnie błędne jak podkreślił @hanshenrik, a kiedy się stąd, że wszystko tak naprawdę jest dodawaniecall_user_func_array
ifunc_get_args
połączeń.Jeśli chcesz rzucić okiem na zawartość zmiennej podczas uruchamiania, rozważ użycie prawdziwego debuggera, takiego jak XDebug. W ten sposób nie musisz zepsuć kodu źródłowego i możesz użyć debugera, nawet gdy normalni użytkownicy odwiedzają Twoją aplikację. Nie zauważą.
źródło
Oto kompletne rozwiązanie jako funkcja:
źródło
To może trochę nie na temat.
Szukałem sposobu na zapisanie tego rodzaju informacji w dzienniku Docker mojego kontenera PHP-FPM i wymyśliłem poniższy fragment kodu. Jestem pewien, że mogą to wykorzystać użytkownicy Docker PHP-FPM.
źródło
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
Naprawdę podoba mi się
var_dump()
„S gadatliwy wyjścia i nie był zadowolony zvar_export()
” s lubprint_r()
„s wyjścia, ponieważ nie dać jak najwięcej informacji (np typ danych brakuje, długość brakuje).Aby napisać bezpieczny i przewidywalny kod, czasem warto rozróżnić pusty ciąg znaków od wartości null. Lub od 1 do prawdy. Lub między wartością zerową a fałszywą. Więc chcę mój typ danych w danych wyjściowych.
Chociaż było to pomocne, nie znalazłem prostego i prostego rozwiązania w istniejących odpowiedziach, aby przekonwertować kolorowe dane
var_dump()
wyjściowe na dane czytelne dla człowieka na ciąg bez tagów HTML i zawierających wszystkie szczegółyvar_dump()
.Zauważ, że jeśli masz kolor
var_dump()
, oznacza to, że masz zainstalowany Xdebug, który zastępuje domyślny phpvar_dump()
dodawania kolorów HTML.Z tego powodu stworzyłem tę niewielką odmianę, podając dokładnie to, czego potrzebuję:
Zwraca poniższy ładny ciąg:
Mam nadzieję, że to komuś pomoże.
źródło
Od http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
ob_get_clean () może wyczyścić tylko ostatnie dane wprowadzone do bufora wewnętrznego. Tak więc metoda ob_get_contents przyda się, jeśli masz wiele wpisów.
Z tego samego źródła, co powyżej:
źródło
Długi ciąg : użyj
echo($var);
zamiastdump($var);
.Obiekt lub tablica :
var_dump('<pre>'.json_encode($var).'</pre>);'
źródło