![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 17 Dołączył: 23.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Napisalem klase do obslugi wyjątków, która przechwycone komunikaty, kod błędu i ślad wywołań zapisuje do pliku. Prosiłbym o komentarze, co możnaby zrobić lepiej, co zmienić, itp. jakiejś dodatkowej funkcjonalności raczej nie przewiduje, chyba, że bedzie to naprawdę ciekawy pomysł. Porad chciałbym zasięgnąć od doświadczonych programistów ![]() A o to kod klasy:
Pozdrawiam -------------------- serwiswww.pl
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 3 Dołączył: 29.07.2005 Skąd: Szczebrzeszyn Ostrzeżenie: (0%) ![]() ![]() |
do oceniania jest osobne forum...
a co do klasy wygląda ok ![]() Ten post edytował pawel_k 29.06.2007, 22:06:15 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 17 Dołączył: 23.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Znam wlasnie ta funkcje, tylko no niestety, nie zaspokoila moich potrzeb. Jak widac, wraz z typem danych zwracam rowniez jakies informacje, np rozmiar tekstu, zawartosc tablicy. Chcialbym zachowac funkcjonalnosc tej metody taka jaka jest, a nie wiem, jak da sie to zrobic w inny sposob. Pozdrawiam, no i komentarze nadal mile widziane -------------------- serwiswww.pl
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
A zastosowanie gettype w czym ci przeszkadza ?
U mnie to wygląda tak. metoda getBacktrace() korzysta z tej metody sprawdzając typ zmiennej. Poza tym twój kod jest mało czytelny zobacz czy nie da się tego rozbić na kilka innych metod. I jeszcze jedna uwaga może to jest lekka paranoja, ale konstrukcja alternatywna if ( warunek ? spełniony : niespełniony ) oprócz tego że gorzej się ją czyta wykonuje się dłużej od zwykłej. ( czy ktoś może dodać stripslashes to dej cholernej funkcji wyświetlającej kod PHP na forum bo zaczyna być to irytujące ? ) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 0 Dołączył: 27.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze - po co tworzysz stałe globalne?? Nie prościej tworzyć stałe w klasie?
Po drugie zamieniłbym stałą Exception_Logging_Level na właściwość statyczną klasy. Po trzecie - na mój gust metoda __construct jest przeładowana - dokonaj refaktoryzacji Po czwarte - czemu wszystkie metody są final Po piąte - jakoś nie odpowiada mi trzymanie logowania wyjątków w klasie wyjątków - jest to bliskie tworzenia boskich klas Po szóste - zamiast tego dużego if'a użyłbyś var_export" title="Zobacz w manualu PHP" target="_manual |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat Po piąte - jakoś nie odpowiada mi trzymanie logowania wyjątków w klasie wyjątków - jest to bliskie tworzenia boskich klas Dziwię się, że tak późno to padło. Obiekt wyjątku powinien pełnić swoją rolę, czyli służyć do zbierania informacji o sytuacji, w której został wyrzucony. Logowanie to zadanie dla zupełnie innego obiektu. Lepiej nic nie mieszaj z wyjątkami, klasa Exception jest na tyle dobra jako baza, że tworzenie nowych typów wyjątków ma za zadanie nadać im odpowiednią nazwę. Nic więcej... Pomijając fakt, że w ten sposób jesteś na sztywno związany z jednym sposobem logowania wyjątków. Nie zmienisz implementacji, bo:
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 17 Dołączył: 23.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Dzieki chlopaki, za ostra jadke ![]() @UDAT Co do definiowania zmiennych globalnych, od linii 3-8 niezmienie tego raczej, poniewaz, jesli tworze nowy wyjatek, to zdecydowanie bardziej przejrzyste jest uzycie takiego kodu: Kod throw new LoggedException("komunikat", EXCEPTION_WARNING, 26); niz takiego Kod throw new LoggedException("komunikat", LoggedException::EXCEPTION_WARNING, 26); jesli chodzi o nastepne 3 linijki definicji, to mam taki zcentralizowany plik konfiguracyjny (parsowanie pliku .ini) i objekt ktory to zczytuje, nastepnie definiuje wlasnie takie zmienne Co do rozdzielenia klasy na klase do wyjatkow i do logowania myslalem nad tym, mam nawet gotowy logger, nie wiem, jakos mi to tak przyszlo, zeby zebrac to do jednej kupy, gdyz przychodzily mi do glowy rzeczy typu, a co jesli logger sie nie zaladuje, a to to, a to tamto, ale jednak po cos jest to OOP. No nic, posiedze jeszcze nad tym i wielkie dzieki za porady ![]() -------------------- serwiswww.pl
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 0 Dołączył: 27.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze parę słów na koniec:
Ostatnio z coraz większym zainteresowaniem poznaję możliwości użycia AOP do poprawy jakości, które także w tym wypadku byłoby najlepszym rozwiązaniem. Oto szybko naskrobany aspekt:
Powyższy przykład zawiera wyekstrahowany z klasy wyjątku - kod odpowiedzialny za logowanie. Oczywiście klasę MyLogger musisz utworzyć odpowiednią do zastosowania. Natomiast zamiast odpowiednich poziomów(podawanych w konstruktorze) wyjątków, które są niezbyt praktyczne, używać dziedziczenia, np.:
Przykład napisany do użycia z phpAspect - opis instalacji jest na stronie projektu i na moim blogu ( patrz Automatyczny Singleton ). Zapraszam do poznawania tego podejścia do programowania. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 07:55 |