![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 19.04.2005 Ostrzeżenie: (10%) ![]() ![]() |
Czy jest sposob na obsluge wyjatkow funkcji wbudowanych w php. Chodzi mi o include ('plik'), gdzie po wpisaniu nieistniejacego pliku bede mogl wykonac wlasna funkcje a nie ze parser informuje mnie o tym ze pliku nie znaleziono.
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 22.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Easy guys... Proszę Was, taka dyskusja do niczego nie prowadzi.
Jak zwykle każdy ma trochę racji i wszystko da się rozwiązać, ale po kolei. Cytat Funkcja __autoload() służy do automatycznego ładowania pliku. Koledze chodzi właśnie o własne błęd z wyjątkami. Tak ale jej wykorzystanie do niczego nie prowadzi w tym konkretnym przypadku. Funkcja ta jest wywoływana w przypadku kiedy nie została znaleziona definicja klasy, a nie dołączany plik. Cytat Wszystko ok, tyle że klasa ErrorException już istnieje No jakby nie było. A ta skąd się wzięła? Ktoś wie gdzie jest jej definicja? Swoją drogą kolejny przykład, który utwierdza mnie w przekonaniu, że brak przestrzeni nazw w php jest dużym minusem i powinny się pojawić w 6. Cytat W obecnej postaci ten sposób jest nie do zaakceptowania, ponieważ zatrzymuje egzekucję kodu po błędzie pomimo tego, że wyjątek został obsłużony przez handleException (zatrzymuje go handleError). Jest to prawdę mówiąc dobra uwaga. Mój przykład wygląda tak, ponieważ osobiście mam bardzo restrykcyjne podejście do błędów. Staram się z takim samym naciskiem eliminować błędy typu fatal jak i notice. Myślę że takie podejście się sprawdza, ale rzeczywiście php w stosunku do pewnych błędów zachowuje się inaczej i pozwala aby wykonywanie kodu było kontynuowane. Decydując się na wyjątki w pewnym sensie zrezygnowaliśmy z takiej możliwości. Czy to źle? czy dobrze? ..tutaj każdy będzie miał swoje zdanie. Spróbujmy zrobić mały refactoring, aby rozwiązać problem jaki ma Ozzy. Po pierwsze wyrzucając wyjątek w bloku try, nie mamy możliwości kontynuowania kodu w tymże bloku. Aplikacja będzie działać dalej, przechodząc do odpowiedniego bloku catch. Więc będziemy musieli zrezygnować z bloku try (tam gdzie nie jest konieczne jego używanie) i polegać na funkcji set_exception_handler. Potrzebna zmiana dotyczy metody ErrorHandler::handleError()
Teraz np. kod
wykona się w całości. Natomiast ten
z wiadomych przyczyn nie. Jeśli spodziewalibyśmy się jakiegoś konkretnego wyjątku, który wymaga obsłużenia należałoby oczywiście bezwzględnie zamknąć taki kod w bloku try. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 03:41 |