Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> skeleton - wykorzystanie w praktyce
smiady
post
Post #1





Grupa: Zarejestrowani
Postów: 137
Pomógł: 2
Dołączył: 2.07.2007
Skąd: Ostrzeszów

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


Oto pewne wykorzystanie Skeletona:

  1. class PDO2 extends PDO {
  2. private static $obiekt= null;
  3.  
  4. public function __construct() {
  5. parent::__construct('mysql:host=localhost;dbname=test', 'root', '');
  6. }
  7.  
  8. public static function skeleton() {
  9. if(self::$obiekt instanceof PDO2)
  10. return self::$obiekt;
  11. else {
  12. self::$obiekt= new PDO2();
  13. return self::$obiekt;
  14. }
  15. }
  16. }


Jego działanie polega na tym, że gdy pierwszy raz korzystamy ze statycznej metody PDO2::skeleton() utworzy się połączenie z bazą danych, za każdym kolejnym wykonaniem zwróci obiekt, który już powstał. Zastanawiam się nad wykorzystaniem tego przypadku czy warto.
Co jest lepsze.
Pierwszy przypadek: tworze skeletona przy logowaniu użytkownika (czyli tworze połączenie z bazą danych) i trzymam w sesji, gdzie za każdym razem, gdy przechodzę do innego pliku odczytuje z sesji skeletona i metodą pobieram połączoną już bazę danych.
Drugi przypadek: Za każdym razem, gdy przechodzę do innego pliku .php w systemie tworzę nowe połączenie z bazą danych i zamykam je.
Co jest lepsze ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Nie spotkałem się jeszcze z nazwą "skeleton", to co podałeś to "singleton".
2. Jest bardzo mało przypadków, gdzie jego wykorzystanie ma jakikolwiek sens, mimo to w sieci znajdziesz pełno przykładów jego użycia, niestety najczęściej robią one więcej złego niż dobrego.
3. Dane wrzucone do sesji są poddawane procesowi serializacji przed zapisem i deserializacji przed odczytem (Google: https://www.google.pl/search?q=php+serializ...93&ie=UTF-8 ) więc na dobrą sprawę i tak będziesz miał tworzony nowy obiekt na każdej podstronie. Dodatkowo dane typu resource (PDO trzyma takie coś w swoim wnętrzu) nie mogą być serializowane.
4. Utrzymywanie jakiejś puli obiektów PDO wykorzystywanych przez kolejne żądania (connection pool) byłoby bardzo dobre, niestety w PHP na dobrą sprawę nie da się tego osiągnąć - istnieje coś takiego jak persistent connections ale nie sprawuje się to za dobrze.

Jeżeli nie widzisz miejsca na użycie Singletonu, nie próbuj go nigdzie wrzucić na siłę.

Ten post edytował Crozin 6.07.2014, 19:56:03
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 09:24