Tworzenie obiektów superglobalnych

Tworzenie obiektów superglobalnych
Szuwar_Jr
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Poradziłem sobie ze swoim problemem, ale nie jestem doświadczony w PHP i mam wrażenie, że można by to było zrobić lepiej.

Piszę klasę tworzącą logi podczas działania aplikacji. Idea jest taka: w pierwszym skrypcie jest tworzony plik i podczas działania kilku stron informacje są zapisywane cały czas do niego.

Myślałem, że zrobię sobie tak, że dorzucę do pierwszego skryptu-formularza pole składowe mojej klasy, zainicjuję i to będzie działać. Nie działa... Aplikacja za każdym odświeżeniem strony tworzy nową instancję i w sumie to dość logiczne jak na PHP.
Stanęło na tym, że tworzę sobie obiekt swojej klasy przy pierwszym odpaleniu pierwszego skryptu i wrzucam go do zmiennej sesyjnej. Z tym, że takie korzystanie jest bardzo uciążliwe - serialize/unserialize, problem z zapisem pola składowego typu resource (tego chyba nie da się przeskoczyć, zrobiłem to inaczej). I dlatego mam prośbę do bardziej doświadczonych w PHP programistów o wyjawienie mi jak się robi "takie rzeczy", aby było "łatwiej i przyjemniej".

Reasumując - potrzebuję stworzyć obiekt swojej klasy (współpracujący z plikiem), który będzie tworzony tylko raz i będzie dostępny na kilku stronach. Jak? Jedynie sesje?

Demonical Monk
  • Rejestracja: dni
  • Ostatnio: dni
1

Kombinujesz jak koń pod górkę. Nie możesz zrobić tego loggera od nowa za każdym razem? Unserialize kosztuje, w praktyce PHP robi to samo tylko większym kosztem. Po co chcesz zapisywać resource MySQLa? Zapisuj już wypakowane dane. Możesz użyć bazy danych zamiast sesji.

Szuwar_Jr
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Kombinuję, kombinuję... Chyba powodem jest to, że przeszedłem się z C++ i mam mały problem z przyzwyczajeniem się do różnic językowych.
Zapis jest (bo musi być) do pliku.

Właśnie wymodziłem to tak, że wrzuciłem konstruktor obiektu na początek skryptu (mniemam, że w takim układzie jest on odpalany za każdym przeładowaniem strony) i wykorzystując sesję podaję mu "stałą" nazwę pliku. W ten sposób tworzę za każdym razem nowy obiekt, ale tożsamy z poprzednim.
Ale nadal to jakieś takie nieeleganckie i nie podoba mi się... Naprawdę nie ma ciekawszych mechanizmów do takiej problematyki?! xD

PS: jeśli coś źle rozumiem, to będę wdzięczny za poprawienie.
PS2: wybaczcie oczywistości jeśli są.

Demonical Monk
  • Rejestracja: dni
  • Ostatnio: dni
1
Szuwar_Jr napisał(a)

Kombinuję, kombinuję... Chyba powodem jest to, że przeszedłem się z C++ i mam mały problem z przyzwyczajeniem się do różnic językowych.
Zapis jest (bo musi być) do pliku.

Właśnie wymodziłem to tak, że wrzuciłem konstruktor obiektu na początek skryptu (mniemam, że w takim układzie jest on odpalany za każdym przeładowaniem strony) i wykorzystując sesję podaję mu "stałą" nazwę pliku. W ten sposób tworzę za każdym razem nowy obiekt, ale tożsamy z poprzednim.
Ale nadal to jakieś takie nieeleganckie i nie podoba mi się... Naprawdę nie ma ciekawszych mechanizmów do takiej problematyki?! xD

PS: jeśli coś źle rozumiem, to będę wdzięczny za poprawienie.
PS2: wybaczcie oczywistości jeśli są.

Nie wiem, ja przechodząc na inny język staram się na chama znaleźć ładne i zgodne z zamysłem rozwiązanie, a nie kombinować jak koń pod górkę "byle program działał". Jeśli masz takie problemy to najprawdopodobniej spieprzyłeś projekt albo zrobiłeś zbyt dużo abstrakcyjnych warstw. Pierwszy problem to to, że PHP to drewniana proteza. Drugi że za bardzo kombinujesz. Każde odświeżenie strony to stworzenie zupełnie nowej interpretacji skryptu. Można powiedzieć, że interpreter PHP nie zna niczego co powstało wcześniej.

Co do samego loggera: Możesz użyć mechanizmu error reporting albo wyjątków i postawić globalny handler...

Szuwar_Jr
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Pewnie masz sporo racji - nie przemyślałem tego do końca na wstępie i teraz wychodzą problemiki. Inna sprawa, że specyfikacja wymusiła na mnie takie, a nie inne rozwiązania. No cóż, dopiero uczę się chodzić w PHP i nawet teraz bardziej elokwentne rozwiązania nie przychodzą mi do głowy... Coś tam pewnie jednak wymyślę.

Co do proponowanych solucji: tylko tak tego nie mogę zrobić, ze względu na wymagania (nie chodzi tylko o obsługę wyjątków), chociaż zapewne postawię globalny handler - dzięki za podpowiedź.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.