![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 215 Pomógł: 1 Dołączył: 13.04.2003 Skąd: z ławki przed blokiem Ostrzeżenie: (0%) ![]() ![]() |
Witam
catch try itp, probuje tym jakas zawladnac tylko chyba nie za bardzo rozumiem idei ![]() powiedzmy mam taki kodziek
no i w sumie wiadomo ze $a musi byc tablica inaczej error: Warning: Invalid argument supplied for foreach() in D:\WWW\nieruchomosci\admin\test.php on line 5 no wiec jak wylapac takiego wyjatka? musze dac np cos takiego:
przyklad blogu try catch z php.net tak to trzeba robic czy mozna nie wiem jakaos latwiej ;p |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Wyjątek zawsze musisz wyrzucić lecz jeżeli nie chcesz pisać cały czas w bloku catch:
echo ... możesz stworzyć sobie klase osłonową która dziedziczy po Exception, przykład klasy która u mnie odpowiada za wyrzucanie wątków krytycznych i odrazu wyświetlanie ich na ekran użytkownikowi:
Później jeżeli będziesz potrzebował stworzyć więcej typów wyjątków (tak aby odpowiedni wyjątek był rzucany w danej sytuacji) możesz po prostu dziedziczyć po SystemException. Przykład:
Pozdrawiam Ten post edytował Diwi 6.06.2006, 15:27:02 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 122 Pomógł: 0 Dołączył: 23.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ja do konca nie rozumiem tego... wielu uzytkownikow zwracało mi uwage, ze wyjatek nie musi byc wyrzucony na ekran i pokazany uzytkownikowi, ze w wielu przypadkach sluzy on tylko programiscie.
Ale jak wykorzystac nie wyrzucone wyjatki? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Zapisac do loga
![]() ![]() -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Tutaj kilka ciekawych zdań na temat wyjatków... w sumie tekst odpowiada na wszystkie zadae przez ciebie pytania. What are Exceptions? - The Concept
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 240 Pomógł: 0 Dołączył: 18.01.2004 Skąd: rzeszów / kraków Ostrzeżenie: (0%) ![]() ![]() |
a czy wyjątek można zapisać a potem odczytać bez zatrzymywania kodu, np. gdy wystapi jakis błąd który nie jest błędem krytycznym ale zgłaszam wyjątek w momencie gdy on wystąpi kod się zatrzyma jeśli zrobie to tak jak ponizej:
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 122 Pomógł: 0 Dołączył: 23.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
I jak rozpoznac czy wyjatek jest krytyczny, ze trzeba zatrzymac kod, czy nie?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 240 Pomógł: 0 Dołączył: 18.01.2004 Skąd: rzeszów / kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
a czy wyjątek można zapisać a potem odczytać bez zatrzymywania kodu, np. gdy wystapi jakis błąd który nie jest błędem krytycznym ale zgłaszam wyjątek w momencie gdy on wystąpi kod się zatrzyma jeśli zrobie to tak jak ponizej:
Wyjątek zawsze "zatrzymuje" wykonanie kodu który jest w bloku. Jeśli chcesz kontynuować wykonywanie kodu to musisz po prostu zrobić tak
Co od rozpoznania czy dany wyjatek jest krytyczny - najlepiej stworzyc sobie klasy pochodne po wyjatku - czyli wlasne wyjatki - wtedy bedziesz wiedzial jaki wyjatek wystapil czyli np tak
Ten post edytował athabus 7.06.2006, 12:15:38 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A'propos rozpoznania, czy wyjątek jest krytyczny... fakt, możesz stworzyć własne wyjątki, ale jak jest napisane w tekście który podałem wyżej - powinny służyć niejako do dania możliwości skryptowi podjęcia alternatywnych działań. Dlatego jako wyjątek krytyczny rozumiem taki, który skrypt zatrzymuje. I tutaj do gry wchodzą kody - sam definijjesz kod wyjątku i sam stwierdzasz czy jest krytyczny, ale przynajmniej jsteś w stanie ocenić czy wyjątek jest krytyczny czy nie.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
@LBO Przejrzałem pobierznie tego arta - fajny tekst - muszę go przeczytać dokładniej w wolnej chwilii.
Do tej pory raczej nie używałem kodów błędów w celu określenia "krytyczności" wyjątku, zazwyczaj wystarczało mi określenie typu wyjątku, żeby podjąć dalsze działania - kody mogą się jednak przydać gdy moje skrypty staną się bardziej skomplikowane, żeby ograniczyć ilość klas pochodnych od Exception ![]() Taka moja ogólna refleksja - która jest zdaje się zgodna z tym artykułem - to, żeby nie nadużywać wyjątków. Wyjątki są ok, ale kod taki jak np. ten poniżej jest przykładem niepotrzebnego użycia (IMHO). Mówię to dlatego, że w manualach, książkach itp takie przykłady właśnie są podawane.
Wyjątki służą raczej do sygnalizowania problemów, którego sposób obsłużenia będzie zależny od kontekstu w jakim metoda wyrzucająca wyjątek zostanie użyta - przynajmniej ja tak je rozumiem //edit: No i jeszcze oczywiście dodam, że tworząc własne klasy wyjątków można zapisać więcej informacji "środowiskowych" z momentu gdy wystąpił wyjątek - np. Jeśli jest to wyjątek bd - można "zapamiętać" ostatnie zapytanie, nr błędu zwrócony przez bazę, komunikat itp itd - ma to spore znaczenie np. gdy wywołuje się zapytania w pętli Ten post edytował athabus 7.06.2006, 15:02:43 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście tworzenie własnych wyjątków jest wskazane jaknajbardziej. Nie pisałem rzecz jasna, by tworzyć milion kodów
![]()
Następnie stworzyłem klasę BatchImage (masowa transformacja zdjęć) i np nie widzę powodu czemu ta klasa miała, by wyrzucać wyjątek BatchImageException, skoro nadal wszystko kręci się wokół manipulacji na zdjęciach. BatchImage również rzuca ImageException, ale kontekstu mogę się dowiedzieć z kodu (np. define('BATCHIMAGE_TRANSFORMATION_ERROR', 12);). Jest to moim zdaniem bardziej naturalne i elastyczne - moge zareagować na poszczególne błędy,a resztę olać. Ten post edytował LBO 7.06.2006, 16:56:31 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jesli wyjatki maja sluzyc tylko do poinformowania programisty o nieprawidlowym dzialaniu aplikacji to wystarczy odpowiedni komunikat w standardowym wyjatku. Ja natomiasts uzywam wyjatkow do sterowania praca aplikacji i wtedy o wiele uzyteczniejsze jest uzycie nazwanych wyjatkow.
Prosty przyklad: System logowania. Koles wpisuje w pola login i password niedozwolone dane (np. login zawiera spacje, albo password jest wartoscia pusta). Obiekt Request filtruje dane przeslane metoda POST przez uzytkownika, a poniewaz na wartosci zmiennych login i password zostaly nalozone ograniczenia wykrywa ich niepoprawnosc wiec rzuca wyjatek. Aplikacja wykrywa wyjatek obiektu Request, a poniewaz jest to wyjatek nazwany np. RequestConstraintValueException podejmuje zdefiniowana w sekcji catch akcje ktora polega na przekierowaniu spowrotem na strone, z ktorej nadeszlo zadanie. -------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]()
Post
#14
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Super opisałeś wyjątki. W zasadzie zagadnienie już trochę poznałm, ale dla kogoś kto jeszcze nie używał wyjątków artykuł na pewno będzie przydatny... Aż sobie RSS dodałem do mojego czytnika ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 04:05 |