Informacje o zmiennej, Funkcja wyświetlająca informacje o zmiennej |
Informacje o zmiennej, Funkcja wyświetlająca informacje o zmiennej |
25.03.2011, 12:45:24
Post
#1
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 9 Dołączył: 2.02.2011 Skąd: undefined Ostrzeżenie: (0%) |
Witam
Napisałem sobie prostą funkcję do wyświetlania informacji o zmiennej, połączenie print_f() i var_dump(). Funkcja w tagu <pre> wyświetlana jest podobnie do print_f(). Zamieszczam poniżej kod, może komuś się przyda.
Struktura funkcji wygląda następująco: Kod void print_var(mixed $variable,[int $level=0,[int $arname=1,[string $roach="\t",[bool $inside=false]]]]) gdzie: $variable - zmienna którą przetwarzamy; $level - poziom wcięcia, przydatne przy tablicach żeby wartości tablic zagnieżdżonych były wyświetlone z wcięciem; $arname - czy wyświetlić ''array\n" na początku w przypadku gdy zmienna jest tablicą, standardowo tak; $roach - czy ma być wykonane wcięcie, standardowo tabulator; $inside - używane wewnątrz funkcji do rekurencji, aby prawidłowo wyświetlało wcięcia; Funkcję najlepiej wyświetlać poprzez tag <pre> żeby zwiększyć czytelność tak jak to ma miejsce przy print_r(). Gdy wywołamy funkcję w postaci:
i $var nie będzie zdefiniowane, funkcja wyświetli informację o tym. Przykład użycia dla następującego kodu
Kod array
( [0] => resource(stream) [test] => integer(45) [ttds] => string[5]("fdsfd") [1] => integer(34) [2] => string[4]("5342") [3] => array ( [0] => array ( [fds] => resource(mysql link) [0] => integer(456) ) [11] => float(3.25) [elo] => integer(255) [12] => array ( [0] => array ( [0] => array ( [0] => object["stdClass"] ( [student] => array ( [0] => string[4]("test") [1] => string[4]("tfds") [2] => string[5]("dsfew") ) ) ) ) ) [13] => string[5]("teggd") ) [4] => boolean(true) ) Ten post edytował shinuexx 25.03.2011, 12:53:59 |
|
|
25.03.2011, 12:58:08
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Tylko po co coś takiego skoro zwykły var_dump() z xdebugiem daje dużo lepszy rezultat: http://jsfiddle.net/w8wHf/
|
|
|
25.03.2011, 13:00:58
Post
#3
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
-------------------- |
|
|
25.03.2011, 16:07:39
Post
#4
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 9 Dołączył: 2.02.2011 Skąd: undefined Ostrzeżenie: (0%) |
Dzięki za tego str_repeat 'a w sumie łatwiej;P o zmiennej rekurencyjnej to nie pomyślałem. Zobaczę co uda mi się wytworzyć żeby tą funkcję zabezpieczyć przed rekurencją nieskończoną rekurencją.
|
|
|
26.03.2011, 14:41:55
Post
#5
|
|
Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) |
Nie podoba mi się ten kod. Zoptymalizuj go trochę. Przykład:
-------------------- Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ. |
|
|
26.03.2011, 15:00:39
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
Po co to wszystko pisać, skoro mamy całą rodzinę metod assertXXX w pakiecie PHPUnit
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
26.03.2011, 15:36:27
Post
#7
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
A ty wiesz co czego służy assert?
-------------------- |
|
|
26.03.2011, 15:38:42
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
A ja wiem, do czego służy assert.
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
26.03.2011, 15:41:34
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Chyba nie skoro uważasz, że astertXXX z PHPUnit zwróci mi czytelną reprezentację wartości zmiennej.
|
|
|
26.03.2011, 15:51:08
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
Chyba nie skoro uważasz, że astertXXX z PHPUnit zwróci mi czytelną reprezentację wartości zmiennej. A gdzie ja tak napisałem? Przy użyciu tych metod można byłoby zaoszczędzić sporo kodu, który tutaj sprawdza np. typ zmiennej w - moim zdaniem - mało elegancki sposób za pomocą dziesiątek par instrukcji warunkowych if -elseif etc. Po prostu nie podoba mi się zaprezentowane przez autora rozwiązanie, jest to moja prywatna opinia i tyle w temacie. Proszę czytać uważnie i nie dopowiadać sobie czegoś, czego nie napisałem. Poza tym w ogóle jest sens pisania czegoś takiego, nie lepiej, łatwiej, szybciej odpalić widok php debug i debugować? -------------------- Nie pomagam na pw, tylko forum.
|
|
|
26.03.2011, 15:52:24
Post
#11
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
To może tak.
Powiedz do czego służy assert i jaki to ma związek z tematem? -------------------- |
|
|
26.03.2011, 16:05:12
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
To jakaś prowokacja czy o co chodzi? Dlaczego niby nie można byłoby wykorzystać metod do diagnostyki typu zmiennej i na podstawie wyniku aserci zwracać rzeczywisty typ zmiennej? Może czegoś nie wiem, w phpunit dopiero raczkuję, proszę mnie poprawić jeśli się mylę.
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
26.03.2011, 16:06:50
Post
#13
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
No właśnie...
Asercje służą do wykonywania porównań wartości w testach jednostkowych. I nie służą do diagnostyki w normalnych aplikacjach lecz tylko do testów jednostkowych. -------------------- |
|
|
26.03.2011, 16:08:17
Post
#14
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
Ok, to wiemy, ale dlaczego nie można oprzeć takiej klasy w sumie diagnostycznej o pakiet do testów jednostkowych? Za ciężkie to będzie, o to chodzi tylko?
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
26.03.2011, 16:10:31
Post
#15
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
To co autor prezentuje to sposób wyświetlania wartości zmiennej. Bardzo nad wyrost bo naprawdę var_dump i print_r są do tego celu bardzo dobre.
Poza tym asercje są za ciężkie. Za każdym razem tworzą nowy obiekt a robią to samo co możesz zrobić jedną prostą operacją logicznę Kod assertTrue wartosc === true assertFalse wartosc === false assertEquals wartosc == inna_wartosc -------------------- |
|
|
26.03.2011, 16:12:27
Post
#16
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
I o to chodziło, dzięki. wookieb++
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
28.03.2011, 15:35:13
Post
#17
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 9 Dołączył: 2.02.2011 Skąd: undefined Ostrzeżenie: (0%) |
Poprawiłem trochę ten kod i wygląda on teraz następująco:
Działa na rekurencji 1 i 2 poziomie rekurencji na obiektach. Dalej jeszcze nie udało mi się dość. A na tablicach to wogóle. Tzn:
z tym sobie radzi: Kod object["stdClass"] ( [student] => [0] => string[4]("test") [1] => string[4]("tfds") [2] => string[5]("dsfew") ) [test] => object[*RECURSION*] [test2] => [test] => object[*RECURSION*] [0] => integer(1) [1] => integer(3) [2] => integer(4) [3] => string[2]("12") ) ) natomiast z tym już nie:
|
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 21:51 |