![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Witam,
Probuje ogarnac jak dziala active record juz od 2 dni, potrzebuje tego zeby napisac moja pierwsza porzadna aplikacje obiektowa. Natknalem sie na jakies marne materialy w internecie na ten temat, grzebalem na forum i ciagle malo rozumiem, wiem ze chodzi tutaj o mapowanie tabeli na obiekty ale z implementacja mam juz problem, jesli ktos moglby mi wytlumaczyc kilka rzeczy bede wdzieczny. Oto co do tej pory napisalem z pomoca kolegow a zaraz zadam pytania (IMG:style_emoticons/default/smile.gif)
Powyzej mamy klase opakowujaca polaczenie z baza danych, no i tutaj raczej nie ma jakis niespodzianek, wszystko jasne Teraz kolejna klasa :
No i tutaj zaczynaja sie schody, po pierwsze co oznacza ten zapis ?
Głownie chodzi mi o odwolanie sie za pomoca dwukropka, czy $db jest zmienna statyczna ze w taki sposob jest tutaj odwolanie ? Nastepnie kolejny rzecz, po dyskusjach z kolega powiedzial mi ze jednak lepiej byloby klase Active Record rozbic na dwie klasy aby zrezygnowac z funkcji statycznej find() , wyglada to wtedy tak :
W tym przypadku nie rozumiem dlaczego jest to rozbite na dwie klasy, tzn wiem dlaczego ale nie znam mechanizmu rzadzacego tym procesem, no i sprawia mi klopot zrozumiene tej linijki :
nie wiem poprostu czy db jest metoda czy zmienna no i jak to powinno dzialac ...... Licze ze znajdzie sie dobra dusza ktora przyblizy mnie od zbudowania mojej aplikacji (IMG:style_emoticons/default/smile.gif) Ten post edytował Wolfie 13.08.2009, 12:43:57 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat Głownie chodzi mi o odwolanie sie za pomoca dwukropka, czy $db jest zmienna statyczna ze w taki sposob jest tutaj odwolanie ? Tak jest zmienna statyczna i do niej przypisywany jest obiekt klasy MySqlDatabase. Potem:
TO jest chyba jakas pomylka zeby robic klasy tylko z deklaracja funkcji i potem po niej dziedziczyc tu i we wszystkich ponizszych przypadkach. WIec chyba raczej chodzilo ci o interfejsy ktore towrza odpowiednie API dla klas ktore je uzywaja ewentualnie klasy abstrakcyjne. Odsylam do: ->http://webcity.pl/webcity/programowanie_obiektowe_w_php_5_cz__2#klasy_abstrakcyjne ->http://webcity.pl/webcity/programowanie_obiektowe_w_php_5_cz__3#interfejs_-_z_czym_to_sie_je Poczytaji bedziesz mial wszystko jasne. W sumie nie wiem co to Active Record ale masz to wszystko jakies takie zamotane |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Nie no akurat ta czesc kodu :
Jest do uzupelnienia, jasne ze trzeba tutaj usupelnic funkcje. Jesli chodzi o ta czesc :
To jest to jak najbardziej poprawne moim zdaniem , poniewaz uniezalezniamy polaczenie z baza od tego jaka baze posiadamy, tutaj akurta mamy napisana funkcje dla bazy MySql ale moga tu sie takze pojawic funkcje dla np PosgreSql itp..... Moze ktos kto zna active record sie wypowie ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat To jest to jak najbardziej poprawne moim zdaniem , poniewaz uniezalezniamy polaczenie z baza od tego jaka baze posiadamy, tutaj akurta mamy napisana funkcje dla bazy MySql ale moga tu sie takze pojawic funkcje dla np PosgreSql itp..... No to wlasnie o tym mowie oparl bys to o jakis wzorzec ktory sie do tego nadaje jak factory czy strategy to by to jakos wygladalo razem z interfejsami i by dzialalo jak trzeba na kazdej bazie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
No tak, ale mi chodzi o zrozumienie i stworzenie Acrive Record dla polaczenia z baza danych, i glownei to chce zrozumiec, ten plik ktory zawiera klase Database akurta mnie malo w tym momencie interesuje, interesuje mnie jak we wzorcu Active Record mapowac tabelke oraz rzedy tabeli na obiekty, dlatego poprosilbym kogos kto cos wie na temat Active Record co powienienem poprawic itd, bede bardzo wdzieczny za wskazowki.....
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 316 Pomógł: 36 Dołączył: 2.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Przede wszystkim co robi to:
private $connection; poza definicją jakiejkolwiek klasy?(IMG:style_emoticons/default/questionmark.gif) Po drugie: public $db; public $tableName; Te zmienne będą statyczne jeśli zadeklarujesz je jako takie, czyli marcio bzdury gada pisząc, że są statyczne. Powinno być static $db; static $tableName; $this->db->query("SELECT * FROM ...... Po trzecie db to zmienna, której metodą jest query. Po czwarte sugeruję, żebyś nie zabierał się za wzorce projektowe, dopóki nie zrozumiesz programowania obiektowego, a na razie go nie rozumiesz. Poszukaj więc jakiegoś kursu, bo na razie to porywasz się z motyka na księżyc. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Cytat Po trzecie db to zmienna, której metodą jest query. Ale jakim cudem jest to zmienna jesli odwolujemy sie do niej poprzez $this->db , jesli bylaby zmienna statyczna to odwolanie wygladaloby zupelnie inaczej , czyli przy pomocy Klasa::zmienna o ile sie nie myle ? Programowanie obiektowe juz przerabialem , ale od miesiaca sie tym nie znajmowalem, tez doszedlem do tego wniosku ze musze sobie przejrzec jakis kurs.... |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 316 Pomógł: 36 Dołączył: 2.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Do zmiennych niestatycznych odwołujemy się właśnie w ten sposób. Tak samo odwołujemy się do metod klasy, które nie są statyczne. Co do wywołania statycznej zmiennej, to tak - odwołanie wygląda w ten sposób (albo, jeśli w kontekście klasy self::zmienna).
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 316 Pomógł: 36 Dołączył: 2.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
W sumie fakt, że dziwnie to wygląda (IMG:style_emoticons/default/tongue.gif) . A istnieć ma prawo - wywołujesz statyczną zmienną jakiejś klasy, ale ta zmienna jest obiektem, stąd operator ->. Tylko nawet jak używasz klas statycznych, to staraj się używać ich zmiennych wewnątrz ich samych, żeby bałaganu w kodzie nie robić (self:(IMG:style_emoticons/default/smile.gif) .
Ten post edytował 230005 13.08.2009, 15:17:54 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
A co w przypadku gdy ta zmienna nie jest obiektem ?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 316 Pomógł: 36 Dołączył: 2.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
No jak nie jest obiektem, to nie wywołasz jej metod, bo nie ma żadnych, to chyba jasne? (IMG:style_emoticons/default/biggrin.gif)
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Ok, napisalem cos takiego :
Czy to juz ma rece i nogi ? |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 316 Pomógł: 36 Dołączył: 2.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Pewnie bardziej niż tamto (IMG:style_emoticons/default/winksmiley.jpg) . Ale wciąż nie rozumiem dlaczego ze zmiennej db czynisz publiczną. Nie wiem co powiedzą inni, ale przynajmniej ja tak nie programuję dopóki nie jest to absolutnie niezbędne. Jest milion innych rozwiązań twojego problemu więc radzę żebyś się wysilił i znalazł rozsądniejsze.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 21:44 |