Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Wywołanie obiektu tylko raz
Wolfie
post 23.10.2009, 17:13:46
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam,

Mam taki kawalek kodu :

  1. function trainFilter($spam) {
  2. $table = $this->tokenizeFile();
  3. foreach($table as $value) {
  4. $totalsrow = new TotalsRow(new MysqlDatabase('localhost','root', 'wmateusz', 'spam'));
  5. $totalsrow->checkTotals($spam);
  6. $tokenrow = new TokenRow(new MysqlDatabase('localhost','root', 'wmateusz', 'spam'));
  7. $token = $tokenrow->setToken($value);
  8. $tokenrow->checkToken($token,$spam);
  9. //$row->insert();
  10. }
  11. }
  12.  
  13. function getTokensValues() {
  14. $table = $this->tokenizeFile();
  15. foreach($table as $value) {
  16. $tab = new TokenTable(new MysqlDatabase('localhost','root', 'wmateusz', 'spam'));
  17. $gettoken[] = $tab->find($value);
  18. }
  19. return $gettoken;
  20. }
  21.  
  22. function getTotalsValues() {
  23. $totals = new TotalsTable(new MysqlDatabase('localhost','root', 'wmateusz', 'spam'));
  24. $gettotals = $totals->findAll();
  25. return $gettotals;
  26. }


Jak widac mamy tutaj 3 funkcje, ale co od razu rzuca sie zapewne w oczy to to , ze za kazdym razem gdy uruchamiana jest jakas funkcja od nowa nastepuje połączenie z bazą danych. np:

  1. $totals = new TotalsTable(new MysqlDatabase('localhost','root', 'wmateusz', 'spam'));


Gdzie new MysqlDatabase to klasa w ktorej konstruktorze nastepuje połączenie z bazą danych, ponadto w powyzszyf funkcjach znajdują sie petle foreach, wiec z kazda iteracja petli jest inicjowane nowe polaczenie z baza.


Prosilbym o wskazówki jak zoptymalizowac kod, zeby tyle razy nie wywolywac połączenia z baza.......

(tak na marginesie, nie wiem czy tego nie powinienem pisac w innym dziale....bo tak z przyzwyczajenia wszystko wrzucam do przdszkola..)

Ten post edytował Wolfie 23.10.2009, 17:22:10
Go to the top of the page
+Quote Post
_olo_1984
post 23.10.2009, 17:35:07
Post #2





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


może warto zastosować wzorzec singletona ? Raczej sprawdza się w takich przypadkach. Pozdr


--------------------
awake
Go to the top of the page
+Quote Post
Wolfie
post 23.10.2009, 17:37:15
Post #3





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Juz o tym myslalem, ale wlasnie chodzi o inne rozwiazanie, chce zeby kod byl bardziej czytelny, nie podoba mi sie to jak wyglada winksmiley.jpg i zastanawiam sie jakby tu mozna bylo "przeniesc" jakos to połączenie z baza poza te funkcje , zeby bylo nadrzedne ze tak powiem, gotowe cale połączenie w momencie gdy wywoluje funkcje a nie dopiero wywolywane w funkcji, ktos ma jakis wskazowki ?
Go to the top of the page
+Quote Post
_olo_1984
post 23.10.2009, 18:06:24
Post #4





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


może przechowywać we właściwości klasy obiekt połaczenia z bazą danych, tworzony w konstruktorze ?


--------------------
awake
Go to the top of the page
+Quote Post
Wolfie
post 23.10.2009, 21:32:45
Post #5





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Troche niezrozumiale napisales, mozesz podac przyklad ?




Go to the top of the page
+Quote Post
_olo_1984
post 24.10.2009, 06:17:42
Post #6





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


  1. yourClass
  2. {
  3. private $oDatabase;
  4. public function __construct()
  5. {
  6. $this->oDatabase = new MysqlDatabase('localhost','root', 'wmateusz', 'spam'); // tu bym jeszcze sprawdził, czy poprawnie został utworzony objekt itp.
  7. }
  8. function trainFilter($spam)
  9. {
  10. //...
  11. $totalsrow = new TotalsRow($this->oDatabase);
  12. //..
  13. }
  14.  
  15. // itd
  16. }


chodziło mi o coś takiego przykładowo, jednak ja sądzę że lepszy byłby ten singleton.


--------------------
awake
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:43