Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyjątki SPL
Fifi209
post 23.01.2012, 23:56:55
Post #1





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Mam sobie klasę Config, która parsuje plik i udostępnia interfejs do pobierania informacji o ustawianiach konfiguracyjnych. W klasie dozwolona jest zmiana ścieżki do pliku, który ma być parsowany.

Teraz do sedna, jaki typ wyjątku mam rzucić gdy plik nie istnieje lub nie mam uprawnień do odczytu?
LogicException czy RuntimeException ?

Dalej, jeżeli mam tablicę asocjacyjną, podaję klucz do funkcji i ma mi zwrócić wartość, sprawdzam czy klucz istnieje, jeżeli nie istnieje to jaki typ wyjątku rzucić?
InvalidArgumentException ?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
wookieb
post 24.01.2012, 00:04:27
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




RuntimeException gdy nie ma dostępu do pliku - to błąd który jesteś w stanie wykryć tylko podczas działania aplikacji
Jeżeli nie ma klucza ja posługuję się OutOfBoundsException


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 24.01.2012, 00:20:15
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Co do braku klucza zastanawiałem się właśnie nad tymi dwoma, ten co ja podałem i ten co Ty.
Jednak zależy jak na to spojrzeć? Z jednej strony wynik złego argumentu, z drugiej może chodzić o typ (?), chyba bezpieczniej OutOfBounds.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Crozin
post 24.01.2012, 00:26:20
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


InvalidArgumentException wywodzi się z LogicException, a w tym przypadku nie powinieneś z niego korzystać. Tak więc OutOfBoundException jest tutaj właściwszym rozwiązaniem.

Swoją drogą wyjątki SPL-a to jedna z tych kompletnie nieprzemyślanych i niedopracowanych części PHP.
Go to the top of the page
+Quote Post
Fifi209
post 24.01.2012, 02:11:13
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


A jednak sam mi kiedyś doradziłeś, aby ich używać:
http://forum.php.pl/index.php?s=&showt...st&p=892835


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Crozin
post 24.01.2012, 02:21:23
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Są niedopracowane ale i tak lepiej z nich korzystać niż tworzyć własną hierarchię kompletnie od podstaw.
Go to the top of the page
+Quote Post
by_ikar
post 24.01.2012, 08:29:52
Post #7





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


U siebie zrobiłem dwie klasy, właściwie to trzy, wzorując się zresztą na symfony. Jedna to jest HttpException, która jest dziedziczona przez NotFoundHttpException oraz AccessDeniedException. W ExceptionHandler sprawdzam czy rzucany wyjątek jest instancją HttpException i jeżeli jest, to z tej klasy jest pobierany "kod" błędu, który w istocie jest kodem błędu http (404 dla NotFoundHttpException oraz 403 dla AccessDeniedException). Chodź równie dobrze wystarczyło by tylko samo HttpException rzucać i przekazać mu odpowiedni kod błędu jako parametr..

No ale w sumie są to jedyne klasy wyjątków, których są niestandardowe, prócz tych trzech, nic ponadto nie tworze wink.gif
Go to the top of the page
+Quote Post
Fifi209
post 24.01.2012, 09:35:56
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Co na piernik do wiatraka? Pytałem o SPL, co raczej oznacza że mam zamiar z nich korzystać. Poza tym nijak Twoje wyjątki nie odzwierciedlają tego co zamierzam osiągnąć.

myślałem, żeby takie błędy jak brak dostępu do pliku zapisywać w logach, wiadomo że brak klucza w tablicy nie jest raczej czymś co blokuje dalsze wykonywanie skryptu, więc zapisywałbym tylko te krytyczne bez których skrypt nie może dalej pracować


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
by_ikar
post 24.01.2012, 09:55:27
Post #9





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Sorry, chyba mi się tematy pomyliły, albo źle przeczytałem i wyszły z tego banialuki biggrin.gif


EDIT:

Cytat
wiadomo że brak klucza w tablicy nie jest raczej czymś co blokuje dalsze wykonywanie skryptu, więc zapisywałbym tylko te krytyczne bez których skrypt nie może dalej pracować


zależy co ten klucz przechowywał. Jeżeli przechowywał ustawienia do połączenia z bazą danych, to nie blokowanie dalszego wykonywania skryptu, posypało by dalsze części aplikacji które korzystają z bazy danych. Wychodzę z założenia, że jak błąd, to działać nie ma prawa. A w konfiguracji to już szczególne ma to znaczenie wink.gif

Ten post edytował by_ikar 24.01.2012, 09:58:51
Go to the top of the page
+Quote Post
melkorm
post 24.01.2012, 10:05:40
Post #10





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat
myślałem, żeby takie błędy jak brak dostępu do pliku zapisywać w logach, wiadomo że brak klucza w tablicy nie jest raczej czymś co blokuje dalsze wykonywanie skryptu, więc zapisywałbym tylko te krytyczne bez których skrypt nie może dalej pracować


Dobrym pomysłem jest łapanie wyjątków które powodują przerwanie aplikacji i wysyłać wtedy maila / zapisywać w logach - innymi słowy raportować o tym że aplikacja z jakichś względów przestałą działać, osobiście nie wiem co jest lepszym pomysłem : czy wrzucać takie rzeczy np do konstruktora wyjątku (załóżmy że jakiś `programista` zrobił na blok kodu łapanie wszystkich wyjątków i nic z nimi nie robi), czy łapać je i wtedy dopiero podejmować odpowiednie akcje.


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 24.01.2012, 10:09:58
Post #11





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Ikar - w przypadku bazy brak jest niedozwolony trzeba rzucić wyjątek, jeżeli dane do połączenia będą złe to wyjątek wyrzuci PDO


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
skowron-line
post 24.01.2012, 10:20:49
Post #12





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Dokładnie za brak klucza w tablicy możesz dostać NOTICE -a, zatrzymanie działania aplikacji będzie przy próbie połączenia i tam wystąpi wyjątek. Bo równie dobrze możesz mieć klucz z błędną wartością.

Ten post edytował skowron-line 24.01.2012, 10:21:49


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Fifi209
post 24.01.2012, 13:02:51
Post #13





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Akurat co do bazy to wyrzucałbym na poziomie sprawdzania klucza, bo jak mi braknie hostu to po co ciągnąc dalej aplikację.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.07.2025 - 22:28