![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 12.10.2010 Ostrzeżenie: (10%) ![]() ![]() |
Witam,
Programuję od jakiegoś roku, ale dopiero od około miesiąca zająłem się OOP i PDO. Mam problem z używaniem atrybutów jednej klasy w drugiej. Konkretniej: klasa users, ma konstruktor iż pobiera z bazy danych na podstawie cookies (jeżeli są) informacje o użytkowniku takie jak login, adres avatara itp i zapisuje je do swoich atrybutów. druga klasa wyświetlająca stronę, nazywa się strona. jest w niej funkcja jak wyświetl_początek() i wyświetla ona kod html z logiem, menu. jest też wyswietl_koniec() gdzie rysowana jest stopka. potrzeba mi użyć w wyświetl_początek() tych pobranych z bazy danych informacji o użytkowniku. jak to rozwiązać? Fragmenty kodu o jakie się rozchodzi:
index.php
Dziękuję za jakąkolwiek pomoc. Pozdrawiam. PS. Ogólnie to dobrze zrobiłem tą obsługę bazy danych? W tym wypadku wykorzystałem static, ale nie chcę tego nadużywać. Ten post edytował Still 12.10.2010, 21:49:56 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
W przypadku takiego kodu ciężko coś doradzić, bo nie wiadomo nawet od czego zacząć
![]() Znasz jakieś wzorce projektowe? U Ciebie wszystko w jednym, baza, model danych, jakiś pseudo-widok czy obsługa szablonów, dlatego moje rady są dwie: 1. Zapoznaj się z wzorcami 2. Popatrz, jak robią to popularne frameworki 3. Liźnij trochę teorii (choćby jeśli chodzi o nazewnictwo) |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Na początek: nie patrz na tym etapie na żadne frameworki. Wzorce również możesz sobie darować bo one nie uczą niczego - pokazują tylko jak rozwiązać pewne popularne problemy: po co Ci rozwiązania problemów, których jeszcze nie masz?
![]() 1. Tak długo jak to tylko możliwe nie uzależniaj obiektu od danych z zewnątrz (chodzi tu o użycie ciasteczek bezpośrednio w klasie czy konstrukcji typu MySQLDriver::$pdo). To tylko problemy i ogromna utrata elastyczności, w zamian dająca Ci 10 linijek zaoszczędzonego kodu - nie warte. Wymagane zależności (inne obiekty, wymagane do prawidłowego funkcjonowania obiektu: tutaj $pdo) przekaż w konstruktorze, a wymagane dane do działania jakiś metod jako ich argumenty:
2. Unikaj nie potrzebnych klas. Tutaj MySQLDriver nie robi kompletnie nic pożytecznego - po co ona? Utrudnia tylko korzystanie z kodu. 3. Dbaj o obsługę błędów. Takie: Jest nic nie warte. Jedynie utrudnia korzystanie z aplikacji. Takim blokiem catch, który wywala po prostu treść wyjątku można objąć cały skrypt (bo w końcu trzeba zrobić coś z wyjątkami, z którymi nie potrafimy sobie inaczej poradzić). Jeżeli jakiegoś wyjątku nie jesteśmy w stanie obsłużyć - nie robimy tego. Być może jakiś "wyższy" (w hierarchii) blok try {} catch {} będzie w stanie to zrobić. Jeżeli nie to może kolejny. Jeżeli nadal nie, to dotrze to do tego obejmującego całą stronę i wywali się na ekran. 4. Daruj sobie póki co jakiekolwiek klasy do wyświetlania strony. Można takie tworzyć, ale muszą być one naprawdę potężne (pod względem skomplikowania). Używaj póki co typowych szablonów. 5. Popracuj nad nazewnictwem. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 12.10.2010 Ostrzeżenie: (10%) ![]() ![]() |
W przypadku takiego kodu ciężko coś doradzić, bo nie wiadomo nawet od czego zacząć ![]() Znasz jakieś wzorce projektowe? U Ciebie wszystko w jednym, baza, model danych, jakiś pseudo-widok czy obsługa szablonów, dlatego moje rady są dwie: 1. Zapoznaj się z wzorcami 2. Popatrz, jak robią to popularne frameworki 3. Liźnij trochę teorii (choćby jeśli chodzi o nazewnictwo) Zgadzam się z tym, dlatego przychodzę tu na forum o radę, bo jednak wolę się rozwijać i opanować te pisanie obiektowo niż cały czas siedzieć w strukturalnym. ![]() Przeczytałem dzisiaj o wzorach projektowych w książce "Programowanie obiektowe w PHP5" Hasina Hayder, ale nic użytecznego z tego nie wyciągnąłem... Na początek: nie patrz na tym etapie na żadne frameworki. Wzorce również możesz sobie darować bo one nie uczą niczego - pokazują tylko jak rozwiązać pewne popularne problemy: po co Ci rozwiązania problemów, których jeszcze nie masz? ![]() 1. Tak długo jak to tylko możliwe nie uzależniaj obiektu od danych z zewnątrz (chodzi tu o użycie ciasteczek bezpośrednio w klasie czy konstrukcji typu MySQLDriver::$pdo). To tylko problemy i ogromna utrata elastyczności, w zamian dająca Ci 10 linijek zaoszczędzonego kodu - nie warte. Wymagane zależności (inne obiekty, wymagane do prawidłowego funkcjonowania obiektu: tutaj $pdo) przekaż w konstruktorze, a wymagane dane do działania jakiś metod jako ich argumenty: Dobra rady, dzięki ![]() 2. Unikaj nie potrzebnych klas. Tutaj MySQLDriver nie robi kompletnie nic pożytecznego - po co ona? Utrudnia tylko korzystanie z kodu. W takim razie na każdej podstronie na początku dawać includem jakiś plik, który będzie mi wykonywał "$pdo = new PDO(...); $pdo->setAttribute(...);" ? 4. Daruj sobie póki co jakiekolwiek klasy do wyświetlania strony. Można takie tworzyć, ale muszą być one naprawdę potężne (pod względem skomplikowania). Używaj póki co typowych szablonów. Mógłbyś rozwinąć swoją myśl "typowych szablonów" ? Stworzyłem już layout strony, pociąłem go i wklepałem w xHTML i CSS. Skoro nie tak mam go zaimplementować, to jak? ![]() Jeżeli chodzi o funkcję sprawdz_zalogowanie(), to zostaje ona wywołana za każdym razem ładowania strony. Chodzi o to, aby sprawdzić czy cookies jakie użytkownik ma w przeglądarce, służą zalogowaniu do serwisu. Zakładamy że wypełnił on już formularz logowania i ciasteczka już sobie tam leżą. Uważam, że takie sprawdzenie trzeba wykonać za każdym razem ładowania strony. Chyba w tym wypadku nie przeszkadza to iż sprawdzenie czy istnieją leży po stronie metody za to odpowiedzialnej? Bo jeżeli ich nie ma to po prostu wrzuca false i tyle ![]() Ten post edytował Still 13.10.2010, 10:26:07 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mógłbyś rozwinąć swoją myśl "typowych szablonów" ? Stworzyłem już layout strony, pociąłem go i wklepałem w xHTML i CSS. Skoro nie tak mam go zaimplementować, to jak? Ot, zwykły plik z szablonem:I coś co pozwoli na chociażby najprostsze operacje na tym:
Cytat W takim razie na każdej podstronie na początku dawać includem jakiś plik, który będzie mi wykonywał "$pdo = new PDO(...); $pdo->setAttribute(...);" ? Możesz to zrobić tak, możesz też mieć jeden plik (googleaj za: Front Controller) do którego będzie kierowany cały ruch strony, a on już sobie wczyta podpowiednie podstrony.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 09:02 |