![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 3 Dołączył: 29.07.2005 Skąd: Szczebrzeszyn Ostrzeżenie: (0%) ![]() ![]() |
witam wszystkich.
mam taki mały problem, czy da się przechwycić wyjątki wyrzucone przez __autoload() ? kod mam następujący:
a w klasie DB:
autoloader wyglada tak:
i teraz jak próbuję wczytać klasę która nie istnieje to zamiast przechwycić mi błąd najpierw w klasie DB i przekazać go do obsłużenia do index.php wyświetla mi w przeglądarce: Cytat Fatal error: Function __autoload(PostgresqlDB_handler) threw an exception of type 'NoClassFoundError' in /var/www/projekty/framework/libs/DB/class.DB.php on line 56 można jakoś przechwycić ten wyjątek? |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków ![]() |
Nie da się. Można to wyrzucić tak jak to było w phiendzie2, czyli w eval() utworzyć klasę, gdzie w jej konstruktorze będzie wypluwany wyjątek.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 3 Dołączył: 29.07.2005 Skąd: Szczebrzeszyn Ostrzeżenie: (0%) ![]() ![]() |
pogooglowalem troche i znalazlem cos takiego:
http://bugs.php.net/bug.php?id=31102 właściwie to zmieniłem konstruktor tak jak mniej wiecej tam było, czyli chociaż za ładnie kod nie wygląda i trzeba jeszcze przerobić __autoload()... a możesz napisać jak by to wyglądało z eval() ? |
|
|
![]()
Post
#4
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
w __autoload wyrzuconych wyjadkow nie obsluzysz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Dopiero w PHP6 ma to byc |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Z tym, ze jaki jest sens tego? Skoro danej klasy nie znaleziono tzn ze cos zostalo zle zaprogramowane (bo przeciez nie moze zdarzyc sie sytuacja, ze nie znaleziono definicji klasy). Nawet jesli zlapiesz wyjatek 'NoClassFoundError' to co zrobisz z takim wyjatkiem? (swoja droga zgodnie ze sposobem nazywania klas wyjatkow powinno byc 'NoClassFoundException', ale to szczegol (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ).
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 3 Dołączył: 29.07.2005 Skąd: Szczebrzeszyn Ostrzeżenie: (0%) ![]() ![]() |
nie do końca coś zle zostało zaprogramowane, po prostu wczytywany jest moduł który akurat nie jest załadowany...
a co do nazewnictwa to stosuję zasadę że ---Error to wyjątki przerywające sktypt po których wyświetlona zostaje strona z info o błędzie (np. w przypadku gdy nie można połączyć się z bazą danych info o problemach technicznych i że zapraszam później (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ), ---Exception powodują zmianę trypu wykonania, np przeniesienie na inną podstronę... Ten post edytował pawel_k 4.02.2006, 20:10:27 |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Da się wywalać wyjątki w __autoload. Trzeba tylko trochę to obejść. Przykład z Phienda:
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 3 Dołączył: 29.07.2005 Skąd: Szczebrzeszyn Ostrzeżenie: (0%) ![]() ![]() |
thx Ociu i chmolu :]
|
|
|
![]()
Post
#10
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Cytat(chmolu @ 2006-02-04 23:37:45) Da się wywalać wyjątki w __autoload. Trzeba tylko trochę to obejść. a obsluzysz je? |
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
set_exception_handler ?
|
|
|
![]()
Post
#12
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Set_exception_handler to główne zło świata :] A bardziej serio, to to jest zla praktyka, bo poczatkujacy developer mysli sobie, ze jesli moze utworzyc handler, no to po co lapac wyjatki.
Ja w pliku index mam klauzure try/catch, tam gdzie wywoluje aplikacji i jest si. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 16:00 |