Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wywołanie obiektu tylko raz
Forum PHP.pl > Forum > Przedszkole
Wolfie
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..)
_olo_1984
może warto zastosować wzorzec singletona ? Raczej sprawdza się w takich przypadkach. Pozdr
Wolfie
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 ?
_olo_1984
może przechowywać we właściwości klasy obiekt połaczenia z bazą danych, tworzony w konstruktorze ?
Wolfie
Troche niezrozumiale napisales, mozesz podac przyklad ?




_olo_1984
  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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.