Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa rejestru
janusz.master
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 20.05.2007

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


Witam

Od razu powiem ze być może jest to gdzieś w sieci w sieci opisane, ale nie znalazłem więc piszę.
Otóz mam klase rejestru. W głównym pliku wrzucam do niej instancję bazy danych.
W klasie user pobieram tą klasę z rejestru. Dodając uzytkownika klasa user korzysta ze skopiowanej bazy danych. Zatem jak mogę w taki sposób otrzymać ilość wszystkich zapytań do bazy?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Kod wygląda przykładowo tak:
  1. <?php
  2. //kontroler:
  3.  
  4. $db = new database();
  5. Registry::add('db', $db);
  6. $user = new user();
  7. //...pomijamy pobieranie danych itp;
  8. $user->add();
  9.  
  10.  
  11. //...klasa user:
  12.  
  13. class user{
  14. ...
  15. function __construct(){
  16. $this->db = Registry::get('db');
  17. }
  18. ...
  19. function add(){
  20. //mamy juz dane;
  21. $this->db->insert($dane);
  22. }
  23. }
  24. ?>


No i teraz w pliku głównym wyswietlam np ilosc wykonanych zapytan.
Jak zrobić aby bazę pobierać i zmieniać jej oryginał(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
Nie do końca rozumiem sposob uzywania rejestru wiec nie wiem jak go uzyc.
Czytalem kilka art'ów o rejestrze ale wszędzie było tylko o jego roli i podstawowych funkcjach.
Proszę o wyjaśnienie.

Ten post edytował janusz.master 23.01.2008, 22:17:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Nattfarinn
post
Post #2





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


Cytat(janusz.master @ 23.01.2008, 20:45:45 ) *
No i teraz w pliku głównym wyswietlam np ilosc wykonanych zapytan.
Jak zrobić aby bazę pobierać i zmieniać jej oryginał (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?

Nie bardzo rozumiem, co chcesz powiedzieć przez oryginał/kopia bazy. Domyślam się, że chodzi Ci o objekt klasy bazy danych, o jego instancje. Wg. przykładu który podałeś, wszystko jest w porządku. Obiekt tworzysz tylko raz (... = new database();) a dalej operujesz tylko na jego uchwytach. Rejestr służy do przechowywania takich instancji w klasie statycznej i sprawuje nad nimi pewną kontrolę. Nie ma znaczenia czy operujesz na Registry::get('db'); czy bezpośrednio na $db, bo obie wartości są uchwytami tego samego obiektu. Więc, jeśli na końcu pliku dasz przykładowo Registry::get('db')->QueryCount(); czy $db->QueryCount(); wyświetli tą samą wartość, uwzględniającą wszystkie użycia obiektu klasy database, niezależnie gdzie i kiedy były używane.

Cytat(janusz.master @ 23.01.2008, 20:45:45 ) *
Nie do końca rozumiem sposob uzywania rejestru wiec nie wiem jak go uzyc.
Czytalem kilka art'ów o rejestrze ale wszędzie było tylko o jego roli i podstawowych funkcjach.
Proszę o wyjaśnienie.

Początkowo używanie rejestru może wydać sie niejasne, ale niewątpliwie ma wiele zalet (chociaż są opozycjoniści tego punktu widzenia). Przede wszystkim zapewnia pewną spójność, a nawet pokusiłbym sie o stwierdzenie: wygodę, pozwala sprawować pełną kontrolę na przepływem instancji czy operacje na nich. Podstawową funkcjonalnością jest możliwość dostępu do instancji danej klasy z dowolnego miejsca aplikacji (klasa statyczna) bez każdorazowego tworzenia nowych obiektów oraz bez użycia zmiennych globalnych (podoba funckjonalność). Tą funkcjonalność można rozszerzyć o wyżej wymienione rzeczy (kontrolę, operacje, wyjątki etc. - czego dusza zapragnie). Prosty, podstawowy sposób użycia:

Zamiast używania zmiennych globalnych (przykład poniższy):
  1. <?php
  2. $db = new database();
  3. ...
  4. class przyklad
  5. {
  6. public function funkcja()
  7. {
  8. global $db;
  9. $db->exeQuery(...);
  10. }
  11. }
  12. ?>


Użyjesz:
  1. <?php
  2. Registry::setObj("baza", new database());
  3. ...
  4. class przyklad
  5. {
  6. public function funkcja()
  7. {
  8. Registry::getObj("baza")->exeQuery(...);
  9. }
  10. }
  11. ?>


Pozostałych użyć opisywać nie będę, bo wychodzę z założenia że: "jeśli ich nie znasz to znaczy, że jeszcze ich nie potrzebowałeś". Przyjdzie samo z czasem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam!
Natt.

Ten post edytował Nattfarinn 24.01.2008, 09:49:14
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #3





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(Nattfarinn @ 24.01.2008, 09:40:16 ) *
Nie bardzo rozumiem, co chcesz powiedzieć przez oryginał/kopia bazy. Domyślam się, że chodzi Ci o objekt klasy bazy danych, o jego instancje. Wg. przykładu który podałeś, wszystko jest w porządku. Obiekt tworzysz tylko raz (... = new database();) a dalej operujesz tylko na jego uchwytach. Rejestr służy do przechowywania takich instancji w klasie statycznej i sprawuje nad nimi pewną kontrolę. Nie ma znaczenia czy operujesz na Registry::get('db'); czy bezpośrednio na $db, bo obie wartości są uchwytami tego samego obiektu. Więc, jeśli na końcu pliku dasz przykładowo Registry::get('db')->QueryCount(); czy $db->QueryCount(); wyświetli tą samą wartość, uwzględniającą wszystkie użycia obiektu klasy database, niezależnie gdzie i kiedy były używane.


Tu masz rację, ale musisz zaznaczyć, że to ma miejsce dopiero od PHP5. (bo niestety niektórzy nie zaznaczają na której wersji pracują, że to nie jest 5.x [choć x też czasem jest bardzo ważny])
Go to the top of the page
+Quote Post
janusz.master
post
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 20.05.2007

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


Ok dzieki za odpowiedź. Po prostu myślałem że w klasie pracuję na kopii obiektu a nie na oryginale. To był mój problem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Czyli działa to podobnie jak wskaźniki np w C.

W takim razie Pozdrawiam, temat do zamkniecia
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: 18.09.2025 - 12:10