Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pisanie klasy do obslugi mysqli
Forum PHP.pl > Forum > PHP > Object-oriented programming
bl4ck_b0x
Witam.

Jakiś czas temu postanowiłem posiedzieć trochę nad obiektowym PHP. Standardowe pisanie laików w OOP zaczyna się od napisania klasy do obsługi bazy danych. Wyczytałem, że wykorzystywanie mysqli jest wydajniejsze od mysql. Sama w sobie mysqli jest klasą którą można wykorzystać więc jest jakiś sens "wynajdowania koła na nowo"? Jeśli będę korzystał z tej wbudowanej już klasy w PHP, to pisząc jakieś inne klasy np. rejestrację w jaki sposób rozwiązać "problem" połączenia? Tzn. w klasie np. register.class.php umieścić kod mysqli('host','user','password','db_name'); ? Czy może w jakiś inny sposób? Z racji, że raczkuję w obiektowym PHP proszę o w miarę jasne wytłumaczenie smile.gif
erix
Ok, przykład pierwszy - uniezależnienie się od stosowanej biblioteki obsługi bazy - mając własną klasę będziesz mógł - bez modyfikowania zapytań - swobodnie wymieniać back-endy do baz, np. korzystasz ze SQLite, a zechcesz przejść na MySQL, czy też zmienić sposób łączenia z bazą z natywnego na np. ODBC. W przypadku prostych zapytań (inne back-endy) skończy się na wymianie klasy. ;]

Pewnym rozwiązaniem jest PDO, ale jak benchmarki dowodzą, potrafi on zmniejszać wydajność o prawie połowę (kosztem udostępnienia obiektowego interfejsu).

Cytat
Jeśli będę korzystał z tej wbudowanej już klasy w PHP, to pisząc jakieś inne klasy np. rejestrację w jaki sposób rozwiązać "problem" połączenia? Tzn. w klasie np. register.class.php umieścić kod mysqli('host','user','password','db_name'); ?

Osobiście korzystam z wywoływania metody zestawiania połączenia w pliku konfiguracyjnym bazy.
bl4ck_b0x
Masz na myśli, że w pliku config.php gdzie możesz sobie ustawić zmienne etc. po prostu wykonujesz np. $db = new db_class('host','user','pass','db_name'); i wszędzie tam gdzie zaincludeujesz plik (a domyślnie pewnie robisz to w indexie aby mieć config.php wszędzie) masz połączenie z bazą w całym skrypcie tak?
erix
W tym konkretnym przypadku mam po prostu wczytywaną konfigurację w konstruktorze sterownika - wywołuje po prostu odpowiednią metodę służącą do inicjalizacji danych połączenia. :] Zaś baza jest "wołana" dopiero wtedy, gdy zachodzi potrzeba pobrania z niej jakichś danych.

Cytat
a domyślnie pewnie robisz to w indexie aby mieć config.php wszędzie) masz połączenie z bazą w całym skrypcie tak?

W indexie, to mam łapanie wyjątka wysypującego cały skrypt i tylko jedną metodę. ;p (vide: MVC)

Cytat
masz połączenie z bazą w całym skrypcie tak?

Nie, tylko w razie potrzeby. :]
zzeus
Cytat(erix @ 19.08.2009, 16:58:56 ) *
Pewnym rozwiązaniem jest PDO, ale jak benchmarki dowodzą, potrafi on zmniejszać wydajność o prawie połowę (kosztem udostępnienia obiektowego interfejsu).


Mógłbyś podać jakiś link do benchmarku w którym to widać ? Bo jakiś czas temu szukałem odpowiedniego interfejsu i postawiłem na PDO, czyżbym się pomylił ?
Cysiaczek
Wiesz ~erix.. zawsze możemy wrócić do Assemblera smile.gif
Nie widzę sensu pisania własnego sterownika (poza oczywistym, czyli rozwojem umiejętności), bo PDO wystarcza. Na PDO nakłada się jeszcze dowolnie wybrany ORM i dopiero można jako tako pracować guitar.gif

Pozdrawiam
erix
~Cysiaczek, widzę że jesteś kolejnym reprezentantem obozu jak będzie wolno chodzić, to się serwer dokupi.

Nie zawsze to ma sens/możliwości.

Cytat
Nie widzę sensu pisania własnego sterownika (poza oczywistym, czyli rozwojem umiejętności)

Jest, właśnie ze względu na wydajność.
cojack
Cytat
pisanie klasy do obslugi mysqli, ma sens?

nie, doctrine wystarcza w 100% i jest szybsze niż cokolwiek Ty byś napisał. a na pewno bezpieczniejsze.
Cysiaczek
@erix - raczej mam po prostu zdrowe podejście. Jak często piszesz aplikacje, w której zaoszczędzone 0.0001 sekundy da wymierny efekt dla szybkości działania serwisu? IMO, to tak wychodzi forum.php.pl x 5.
Przy takich wartościach dopiero (ot z grubsza) możesz oszczędzić kasę kupując czas programisty zamiast nowego serwera smile.gif

Podzrawiam
Pr0100
Cytat
nie, doctrine wystarcza w 100% i jest szybsze niż cokolwiek Ty byś napisał. a na pewno bezpieczniejsze.


lubię Doctrine, ale demonem szybkości to ono akurat nie jest smile.gif

Cytat
jak będzie wolno chodzić, to się serwer dokupi


a co jest złego w takim podejściu? W dzisiejszych czasach nie opłaca się być perfekcjonistą.
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.