![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Od kilku dni próbuję pojąć "rzucanie" wyjątków.
W swoich klasach "rzucam" wyjątkami przy wystąpieniu błędów typu critical dla mojej aplikacji (czyli takie, które uniemożliwiają dalsze działanie aplikacji) Powiedzmy, że wyjątki wydają mi się troszkę "nieporęczne" w użytku. Mam przykładowo: (piszę od ręki) Kod class layout { // jakieś metody function load($dir, $file) { if (file_exists(/* argumenty)) { // include }else{ // rzucam wyjątkiem throw new Exception('Nie mogę załadować pliku xxx.php'); } } } I potem w innym pliku chcąc "złapać" wyjątek... Kod try { $handle->load($plik); } catch { // obsługa błędu, czy to zapisanie loga czy wyświetlenie użytkownikowi informacji o błędzie } Według moich założeń, wyjątkami rzucałbym tylko przy błędach krytycznych, o których pisałem wyżej. I tak jest ich sporo, a używanie wszędzie try { } catch { } jest co najmniej nie wygodne. Macie jakieś swoje pomysły? Doświadczenia ? Co do łapania wyjątków i ich obsługi ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Tzn. Wymyśliłem jedno rozwiązanie do "łapania" wyjątków.
Lecz trzeba by je dopracować. Może coś wymyślimy i będzie przełom? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Mam jakąś klasę: Kod class nazwa1 { // metody bez wyjatków // a tu z wyjątkami function wyjatek1() { // operacje } function wyjatek2() { // operacje } } następnie tworzę nową klasę: Kod interface i_nazwa1 { function wyjatek1(); function wyjatek2(); } class wyjatki implements i_nazwa1 { private $handle; function __construct($handle) { $this->handle = $handle; } function wyjatek1() { try { $handle->wyjatek1(); // wywoła funkcję wyjątek1 z klasy nazwa1 } catch (Exception $e) { // tutaj zapisuję błąd $e->getMessage(); } } } To rozwiązanie byłoby fajne, gdyby te metody były jakoś pogrupowane np. klasa mysql (@edit właściwie to działa jak takie jądro) $handle->mysql->funkcja ale parser $handle->parser->funkcja Rozumiesz mnie ? Bo jak na razie dostaję: $handle->funkcja // mysql $handle->funkcja2 // parser W najlepszym przypadku zrobię sobie nazwy metod na zasadzie: $handle->MysqlFunckja $handle->ParserFunckja Najlepiej jakbym miał $handle->klasa->funkcja ;[ Jakieś pomysły ? Ten post edytował fifi209 21.03.2009, 22:20:49 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.10.2025 - 00:21 |