Staram się zrozumieć koncepcję zmiennych globalnych w PHP. W całym kursie nie znalazłem o tym żadnej wzmianki, a potrzebujemy ten temat omówić na studiach.
Rozumiem, że istnieje słowo kluczowe global, które sprawia, że zmienna wewnątrz funkcji staje się widoczna na zewnątrz. Zastanawiam się tylko, jakie to znajduje zastosowanie w praktyce i czy w ogóle się tego używa? Co jeśli mam już zmienną o takiej nazwie zdefiniowaną poza funkcją? Czy jej wartość się nadpisze?
Będę wdzięczny za wprowadzenie do tematu ze “strony praktycznej”. Dzięki!
1 Odpowiedź
Działają dokładnie tak, jak to opisałeś. Jeśli zadeklarujesz zmienną poza kontekstem klasy czy funkcji, to będzie to zmienna globalna. Natomiast, jeśli znajdujesz się już wewnątrz funkcji, to kontekst się zmienia i tutaj już ta zmienna spoza funkcji nie jest widoczna.
Jest to trochę nieintuicyjne, gdyż w wiodących językach programowania (jak w C, C# czy Java) zmienne z wyższego kontekstu są widoczne w kontekście niższym i mogą być, ewentualnie, nadpisane przez kolejne definicje.
W PHP zmienne są tworzone ad-hoc, bez potrzeby ich wcześniejszej deklaracji. Stąd trochę zamieszania z tymi kontekstami.
Szczerze mówiąc, w praktycznym podejściu do programowania w PHP, z polecenia global korzysta się raczej rzadko (jeśli w ogóle). Szczególnie przy podejściu programowania zorientowanego obiektowo.
W podejściu proceduralnym mógłbym sobie wyobrazić taką sytuację:
<?php $username = "nie zalogowano"; function zaloguj() { // mechanizm logowania global $username = "Marcin"; }
Wtedy, po wykonaniu funkcji zaloguj, do zmiennej globalnej $username przypisalibyśmy wartość Marcin. Jednak takie podejście jest bardzo ryzykowne, bo każda funkcja może nam mieszać w wartościach zmiennych poza funkcją. Ciężko nad tym zapanować.
Dużo rozsądniej jest zwrócić wartość Marcin poleceniem return, po czym przypisać do zmiennej globalnej $username = zaloguj(); co daje nam przejrzystą sytuację.