Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jedna deklaracja 1 klasy dla wszystkich innych, mysql dla wszystkich klas
Spawnm
post
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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




skorzystac ze wzorcow projektowych, np:
Rejestr
od biedy Singleton
Go to the top of the page
+Quote Post
mls
post
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ć.
Go to the top of the page
+Quote Post
Morkai
post
Post #4





Grupa: Zarejestrowani
Postów: 24
Pomógł: 3
Dołączył: 25.08.2005

Ostrzeżenie: (0%)
-----


Cytat(mls @ 26.03.2009, 00:55:17 ) *
to nie trzeba robić nic

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...
Go to the top of the page
+Quote Post
zzeus
post
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
Go to the top of the page
+Quote Post
Spawnm
post
Post #6





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Cytat(Morkai @ 26.03.2009, 12:49:45 ) *
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
  1. <?php
  2. $db=new mysql($dbhost,$dbuser,$dbpass,$dbname);
  3. $session=new session($mysql);
  4. ?>

tylko
  1. <?php
  2. $db=new mysql($dbhost,$dbuser,$dbpass,$dbname);
  3. $session=new session($db);
  4. ?>

(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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...
Go to the top of the page
+Quote Post
Fifi209
post
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
Go to the top of the page
+Quote Post
starach
post
Post #8





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Cytat(fifi209 @ 26.03.2009, 16:55:17 ) *
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.
Go to the top of the page
+Quote Post
Fifi209
post
Post #9





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(orglee @ 26.03.2009, 18:02:05 ) *
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
Go to the top of the page
+Quote Post
starach
post
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.
Go to the top of the page
+Quote Post
Fifi209
post
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)
Go to the top of the page
+Quote Post
starach
post
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
Go to the top of the page
+Quote Post
Fifi209
post
Post #13





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(orglee @ 26.03.2009, 20:39:14 ) *
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.
Go to the top of the page
+Quote Post
mls
post
Post #14





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Morkai @ 26.03.2009, 13:49:45 ) *
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:
  1. <?php
  2. class test1
  3. {
  4.    protected $db;
  5.  
  6.    public function __construct ()
  7.    {
  8.        $this->db = new pdo(...); // czy cokolwiek innego do bazy danych
  9.    }
  10. }
  11.  
  12. class test2 extends test1
  13. {
  14.    public function test()
  15.    {
  16.        print_r($this->db);
  17.    }
  18. }
  19.  
  20. $test = new test2();
  21. $test2->test();
  22. ?>
Go to the top of the page
+Quote Post
Morkai
post
Post #15





Grupa: Zarejestrowani
Postów: 24
Pomógł: 3
Dołączył: 25.08.2005

Ostrzeżenie: (0%)
-----


Cytat(fifi209 @ 26.03.2009, 15:55:17 ) *
Racja bardzo słabe.

Oczywiście nikt w świecie PHP nie słyszał o dependency injection.
Go to the top of the page
+Quote Post
mike
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(Morkai @ 30.03.2009, 23:45:38 ) *
Oczywiście nikt w świecie PHP nie słyszał o dependency injection.
Nie wymagaj zbyt wiele (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Springa nie zbudujesz w PHP, ale uważaj bo zdziwić się możesz: Lion PHP Framework (IoC based PHP framework).
Go to the top of the page
+Quote Post
destroyerr
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:33