jedna deklaracja 1 klasy dla wszystkich innych, mysql dla wszystkich klas |
jedna deklaracja 1 klasy dla wszystkich innych, mysql dla wszystkich klas |
17.02.2009, 13:22:43
Post
#1
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Witam,
mam klasy mysql,session,panel wszystkie są deklarowane w pliku index.php $db=new mysql($dbhost,$dbuser,$dbpass,$dbname); $session=new session(); itp... i teraz pytanie : co zrobić aby mysql był dostępny w innych klasach bez ponownej deklaracji / łączenia? |
|
|
17.02.2009, 13:32:36
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
skorzystac ze wzorcow projektowych, np:
Rejestr od biedy Singleton -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
26.03.2009, 00:55:17
Post
#3
|
|
Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) |
To już zależy tylko od metody jaką utworzony zostanie inny obiekt. Jeśli kolejny obiekt będzie rozszerzeniem obecnego (deklarującego połączenie z bazą danych) to nie trzeba robić nic, by w klasach-dzieciach zmienna istniała (chyba, że będzie to zmienna typu private). Zarówno do singletona jak i rejestru trzeba się w każdej klasie w jakiś sposób odwoływać.
-------------------- |
|
|
26.03.2009, 12:49:45
Post
#4
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 3 Dołączył: 25.08.2005 Ostrzeżenie: (0%) |
|
|
|
26.03.2009, 14:15:47
Post
#5
|
|
Grupa: Zarejestrowani Postów: 441 Pomógł: 71 Dołączył: 3.09.2007 Skąd: wrocław Ostrzeżenie: (0%) |
Polecam wzorzec Registry, o którem już wspomniano wcześniej.
Przykład Zend_Registry -------------------- |
|
|
26.03.2009, 14:44:34
Post
#6
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Trzeba zadeklarować zmienną jako statyczną. Najgorsze rozwiązanie z możliwych. Jak chcesz wykorzystać inny obiekt to po prostu go przekazujesz, nie? $db=new mysql($dbhost,$dbuser,$dbpass,$dbname); $session=new session($mysql); itp... chyba nie
tylko
Robiłem tak , ale to jest dobre do małych stron z 1-2 klasami , w większych projektach jest to już trochę słabe rozwiązanie... |
|
|
26.03.2009, 16:55:17
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) |
Racja bardzo słabe. Ja rozwiązałem ten problem przy swoim projekcie w sposób prosty. Klasa mysql jest u mnie klasą w pełni statyczną. Nie posiada więc konstruktora ani destruktora, za to działa wszystko ładnie. ;d
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
26.03.2009, 18:02:05
Post
#8
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) |
Racja bardzo słabe. Ja rozwiązałem ten problem przy swoim projekcie w sposób prosty. Klasa mysql jest u mnie klasą w pełni statyczną. Nie posiada więc konstruktora ani destruktora, za to działa wszystko ładnie. ;d Robienie sterowników dostępu do danych na obiektach statycznych to masochizm. Zobacz sobie jaka fajna wariacja singletona ( chociaż możliwe że ma to własną nazwę ) jest w ORM o nazwie Doctrine. Wracając do tematu. Pisząc własny framework testowałem bardzo dużo sposobów przekazywania danych. forum.php.pl nawróciło mnie na wzorzec projektowy Context chociaż Registry też ma kilka zalet. Proponowałbym ci dogłębne zbadanie obu wzorców i wybranie tego który najlepiej tobie odpowiada.
|
|
|
26.03.2009, 18:24:27
Post
#9
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) |
Robienie sterowników dostępu do danych na obiektach statycznych to masochizm. Zobacz sobie jaka fajna wariacja singletona ( chociaż możliwe że ma to własną nazwę ) jest w ORM o nazwie Doctrine. Wracając do tematu. Pisząc własny framework testowałem bardzo dużo sposobów przekazywania danych. forum.php.pl nawróciło mnie na wzorzec projektowy Context chociaż Registry też ma kilka zalet. Proponowałbym ci dogłębne zbadanie obu wzorców i wybranie tego który najlepiej tobie odpowiada. Masochizm ? Czemu tak uważasz ? Ja porobiłem takie metody aby było mi jak najbardziej wygodnie, przed wykonaniem jakiejkolwiek metody czy to select czy update sprawdzam czy mam połączenie z mysql, jeżeli nie to rzucam wyjątkiem. ;p -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
26.03.2009, 18:55:39
Post
#10
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) |
To pokaż chociaż prototypy metod.
|
|
|
26.03.2009, 19:04:26
Post
#11
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) |
http://rafb.net/p/qkKxdy33.html
Musiałem dać na rafb bo nie było tutaj wcięć. (stara wersja mojej klasy, gdzieś wydłubałem. Uuu tak patrzę na to nawet wyjątków nie rzucałem i te metody prawie nie rozbudowane) -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
26.03.2009, 20:39:14
Post
#12
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) |
Przede wszystkim nie obsłużysz w ten sposób dwóch rożnych baz albo tej samej z różnymi uprawnieniami. Następnie zwracasz select z tablicy asocjacyjnej. Dobre to było przy PHP 4. No i głównym zarzutem jest to że w każdej metodzie musisz sprawdzać czy masz połączenie. To jest po prostu nie do zaakceptowania.
Spawnm odpowiem tutaj. http://www.symfony-project.org/api/1_2/sfContext |
|
|
27.03.2009, 12:34:33
Post
#13
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) |
Przede wszystkim nie obsłużysz w ten sposób dwóch rożnych baz albo tej samej z różnymi uprawnieniami. Następnie zwracasz select z tablicy asocjacyjnej. Dobre to było przy PHP 4. No i głównym zarzutem jest to że w każdej metodzie musisz sprawdzać czy masz połączenie. To jest po prostu nie do zaakceptowania. Spawnm odpowiem tutaj. http://www.symfony-project.org/api/1_2/sfContext Jakbym się uparł to może i bym obsłużył 10 baz. Lecz nie jest mi to potrzebne. Korzystam z mysql, czasem z musu z postgresql. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
29.03.2009, 13:06:39
Post
#14
|
|
Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) |
Trzeba zadeklarować zmienną jako statyczną. Najgorsze rozwiązanie z możliwych. Jak chcesz wykorzystać inny obiekt to po prostu go przekazujesz, nie? No chyba nie do końca zrozumiałeś moją wypowiedź. Miałem na myśli coś takiego:
-------------------- |
|
|
30.03.2009, 22:45:38
Post
#15
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 3 Dołączył: 25.08.2005 Ostrzeżenie: (0%) |
|
|
|
31.03.2009, 12:57:18
Post
#16
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) |
Oczywiście nikt w świecie PHP nie słyszał o dependency injection. Nie wymagaj zbyt wiele Springa nie zbudujesz w PHP, ale uważaj bo zdziwić się możesz: Lion PHP Framework (IoC based PHP framework). |
|
|
31.03.2009, 13:52:57
Post
#17
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Oczywiście, że ktoś słyszał o di w php. Na przykład tak jak mike podał wyżej, jest też kilka projektów di w php (Crafty, PicoContainer i jeszcze jakiś). Zend Framework ma gdzieś w wersji rozwojowej (czy jak to tam jest) Zend_Di.
No i najważniejsze, Symfony w wersji 2 też będzie mieć, choć na chwilę obecną już jest tworzony, tylko jako osobny komponent. Więcej informacji, jest tam też link do prywatnego bloga, gdzie DI jest opisywany, więc polecam zapoznać się z tymi materiałami. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 09:49 |