Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zmienna globalna w klasie
Forum PHP.pl > Forum > PHP
sf
Przeglądając bibliotekę PEAR natknołem się na przykład,w którym wewnątrz klasy mamy zmienną globalną...

  1. <?php
  2. class MyPerson {
  3.  
  4. // gets an array of data about the seleted person
  5. function getPerson($id) {
  6. global $db;
  7. $result = $db->query(&#092;"SELECT * FROM person WHERE id=$id\");
  8. return $result->fetchRow();
  9. }
  10.  
  11. // example of checking a password.
  12. function checkPassword($username,$password) {
  13. global $db;
  14. $db->query(&#092;"SELECT username FROM person WHERE username='$username' AND password = '$password'\");
  15. return $result->fetchRow();
  16. }
  17.  
  18. }
  19. ?>


Tylko bardzo mnie ciekawi skąd takie podejście... Jeśli sobie stworzę dwa obiekty $db i $db2 to jak mam wykorzystać tą klasę do obiektu $db2? W C++ bym chyba to zrobił na wskaźnikach, a tak to nie wiem co mam zrobić... może $db3 = $db; $db = $db2? (o ile to jest poprawne :}).
scanner
Ale o co Ci chodzi? Bo ja chyba nie kumam...
sf
No więc. Zapytam inaczej. Czy PEAR:biggrin.gifB umożliwia dwa równoległe połączenia np. z mysql i postgresql? :} Bo z tego co widze w dokumentacji końcowej to wszystkie przykłady są w odniesieniu do jednego połączenia. Przykładem jest powyższa klasa, która jeśli stworzymy drugi obiekt o nazwie $db2 to nie będzie można się odwołać do tej klasy ponieważ ona korzysta z na stałe z obiektu $db. Więc by skorzystać z innego połączenia to musiałbym np. zamknąć pierwsze i uruchomić drugie o nazwie też $db. Inny przykład (DB::isError($res)), też nie wiadomo do które go miałoby się odwoływać ($db czy $db2) jeżeli stworzylibyśmy dwa tongue.gif
DeyV
odpowiedź jest prosta - pozwala.
Ale jak ty to sobie obsłużysz - to już Twój problem.
Najlepiej jest po prostu nie korzystać z globali, tylko odpowiednio przekazywać obiekt bazy danych.
A co do metody statycznej - co prawda nie jestem pewien, do czego ona służy (wydaje mi się, ze akurat w tym przypadku nie będzie miała ona wpływu na konkretne połączenie) ale jeśli będziesz miał wątpliwości - po prostu skorzystaj z ADoDB które na pewno nie ma takich problemów.
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.