Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zmienne globalne
rorschach
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 10.07.2009

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


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. ?>


Ten post edytował rorschach 10.07.2009, 08:39:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
rorschach
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 10.07.2009

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


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)
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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())


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 12:48