Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zmienne globalne
Forum PHP.pl > Forum > Przedszkole
rorschach
Witam,
Tworzę na własne potrzeby rdzeń do obsługi bazy.
Plik dołączany jest przez require_once. Na samym początku deklaruje zmienną $db i w funkcjach
create_connection i close_connection wskazuje, że jest to zmienna globalna. W pliku, w którym dołączyłem
wywołuje kolejno create_connection i następnie close_connection. Druga nie ma w ogóle informacji o stworzonym w pierwszej obiekcie. W XDebugu widzę, że
jest to obiekt null, czyli global nie działa. Poczytałem trochę o zakresach i przyznam, ze nadal
nie mogę dojść dlaczego tak się dzieje. Gdy używam $GLOBALS['db'] wszystko działa. Bardzo prosiłbym o wyjaśnienie dlaczego tak się dzieje.



  1. <?php
  2. require_once ('DB.php');
  3.  
  4. $db;
  5.  
  6. function create_connection($user, $password, $hostname, $database){
  7.   $connection_string = "mysqli://$user:$password@$hostname/$database";
  8.  
  9.   global $db;
  10.  
  11. $db =&DB::connect($connection_string);
  12.   if (PEAR::isError($db)) {
  13.    die($db->getMessage());
  14. }else
  15.   echo 'utworzono połączenie';
  16. }
  17.  
  18. function close_connection(){
  19.   global $db;
  20.   $db->disconnect();
  21.   echo 'rozłączono';
  22. }
  23. ?>
zegarek84
zrezygnuj ze zmiennych globalnych - łątwo je możesz zastąpić tworząc jakąś klasę statyczną/ lub klasę ze zmiennymi statycznymi i odwołując się do jej zmiennych - będziesz mógł do nich odwołać się w każdym miejscu swojego skryptu... przykąłdowa prosta klasa:
Kod
class dane{
static $ile=0;
}

i aby się odwołać do tej zmiennej wystarczy napisać dane::$ile - tą zmienną również możesz zmieniać itd...

widzę, że kożystasz z klas ale to z wbudowanych w php - po mału np. zastępując zmienną globalną jakimiś kalsami będziesz się przestawiał na inne myślenie raczej winksmiley.jpg... a rozwiązywanie problemów w clasach nieraz jest znacznie wygodniejsze - choć w sumie to zbiur funkcji i zmiennych winksmiley.jpg
rorschach
Taki mały singleton to w sumie fajna sprawa, ale przechodzę na php z javy i przyznam, że cały czas na czymś się zatrzymuje i dlatego postanowiłem napisać coś w miarę prostego po kolei starając się wyłapać wszystkie haczyki.
Mały update:
plik z funkcjami jest w folderze core
w głównym folderze jest plik require_all.php i w nim includuje wszystkie funkcje niezbędne do działania całej apliakacji
i dopiero w pliku checkLogin.php includuje plik require_all.php. Tu jeszcze podejrzewam, że coś mogłem napsuć.

----/core
----dbase_api.php (definicje funkcji)
-/
-index.php(wywołuje checkLogin.php)
-require_all.php (tu są wszystkie konieczne includy)
-check_login.php (tu wywołuje funkcje)
Fifi209
Cytat(rorschach @ 10.07.2009, 09:56:41 ) *
Taki mały singleton to w sumie fajna sprawa, ale przechodzę na php z javy i przyznam, że cały czas na czymś się zatrzymuje i dlatego postanowiłem napisać coś w miarę prostego po kolei starając się wyłapać wszystkie haczyki.
Mały update:
plik z funkcjami jest w folderze core
w głównym folderze jest plik require_all.php i w nim includuje wszystkie funkcje niezbędne do działania całej apliakacji
i dopiero w pliku checkLogin.php includuje plik require_all.php. Tu jeszcze podejrzewam, że coś mogłem napsuć.

----/core
----dbase_api.php (definicje funkcji)
-/
-index.php(wywołuje checkLogin.php)
-require_all.php (tu są wszystkie konieczne includy)
-check_login.php (tu wywołuje funkcje)


Zrób lepiej jak kolega radzi, albo obiekt klasy db przekazuj jako parametr.
Ew. Możesz użyć singletona.

Nie wiem co includujesz w pliku require_all.php , powiem tylko że do wczytywania klas php5 ma gotową funkcję. (__autoload())
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.