• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Zmienne Globalne Za i przeciw?

Object Storage Arubacloud
+5 głosów
3,408 wizyt
pytanie zadane 3 listopada 2015 w PHP przez Nolandosky Bywalec (2,110 p.)
zamknięte 22 lutego 2016 przez efiku
Moglibyście się wypowiedzieć na temat zmiennych globalnych w PHP, chodzi mi o waszą opinię na temat ich stosowania. Można czy niewolno, albo raz na jakiś czas nie zaszkodzi! Czy wynikają z nich jakieś zagrożenia które mogą spowodować problemy z kodem lub jego bezpieczeństwem.
komentarz zamknięcia: Zamykam.

5 odpowiedzi

+5 głosów
odpowiedź 3 listopada 2015 przez efiku Szeryf (75,160 p.)
wybrane 4 listopada 2015 przez Nolandosky
 
Najlepsza

Stosowanie zmiennych globalnych jest złą praktyką i należy tego unikać.

Jeżeli stosujesz w swoim kodzie global $zmienna; to znak, że poległeś przy projektowaniu aplikacji i dzieleniu jej na moduły/funkcje. 

Nad zmienną globalną nie masz kontroli.

Przykład? Otwórz sobie skrypt tego forum ( jest dostępne na gh ) , widzisz jak rozbudowana jest ta aplikacja? 
Wyobraź sobie teraz, że jako developer wbijasz do drużyny i dokonujesz pewnych zmian w tej aplikacji ( jakiś tam nowy feature ) i nazwałeś sobie zmienna np $alamakota, nagle cała apka staje, albo wariuje, a ty nie wiesz co się dzieje. Okazuje się, że jakiś geniusz użył w kodzie global $alamakota . ( Tak w tym Q2A używane są globale :d) 

Czym zastąpić global

To proste, wystarczy poczytać o wzorcu Dependency Injection i wstrzykiwać sobie do funkcji jako kolejny parametr np połączenie z bazą.

 

To tyle z mojej strony.

komentarz 4 listopada 2015 przez event15 Szeryf (93,790 p.)

Nadmienię, że równie złą praktyką jest static

komentarz 4 listopada 2015 przez efiku Szeryf (75,160 p.)
Tak, static rowniez
komentarz 22 lutego 2016 przez event15 Szeryf (93,790 p.)
Dołączę jeszcze ten link:

http://zapachy-kodu.pl/cleancode/dane-globalne-enkapsulacja-i-czarne-pudelka/2016/01/

Postanowiłem zebrać większość argumentów jakie udało się zgromadzić - na bieżąco również uaktualniam ten wpis. Myślę, że jest dobrym uzupełnieniem do tego tematu.
+3 głosów
odpowiedź 3 listopada 2015 przez furas Maniak (53,800 p.)
Zmienna globalna przechowuje jedną wartość. Jeśli wywołasz dwa razy jakąś funkcję zapisującą w zmiennej globalnej to będziesz miał tylko ostatni wynik. Zwracając wynik przez `return` od razu możesz przypisywać do różnych zmiennych lub wrzucać do tablicy.

Jeśli funkcja korzysta z wartości globalnej to nie ma pewności, że inna funkcja też z niej nie korzysta i nie nadpisze jej zawartości - czyli zrobi coś czego nie będziesz się spodziewał :)
+1 głos
odpowiedź 3 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
ZA:Zmienne globalne mają jak najbardziej sens szczególnie dla elementów wspólnych,które nie będą ich zmieniać .

PRZECIW:Mógłbyś przez przypadek zmienić zmienną globalną i program zwariuje.
komentarz 3 listopada 2015 przez Nolandosky Bywalec (2,110 p.)
Rozumiem że zmienna globalna jest widoczna w całym kodzie, od góry do dołu, ale nie wychodzi poza ten jeden plik, w którym została zdefiniowana.
komentarz 3 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
Tak , jeśli chcesz poza plikiem to musisz stworzyć zmienne sesyjne.

http://miroslawzelent.pl/kurs-php/logowanie-do-strony-sesja-wstrzykiwanie-sql/
komentarz 3 listopada 2015 przez Nolandosky Bywalec (2,110 p.)
O zmiennych sesyjnych wiem, ale chciałem się upewnić co do tych globalnych!
komentarz 4 listopada 2015 przez event15 Szeryf (93,790 p.)
Ja nie widzę żadnych "ZA". To, że coś jest globalne oznacza katastrofę.
komentarz 4 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
Nie zawsze. Jakby ktoś chciał żeby wszystkie funkcje korzystały z wspólnej wartośći np wysokości elementu to można użyć zmienną globalną. Co do nadpisania to można ją nazwać np GLOBAL_nazwa a przy definiowaniu zmiennych nie pisać  "GLOBAL".
komentarz 4 listopada 2015 przez efiku Szeryf (75,160 p.)
Napisałem dlaczego w swojej odpowiedzi nie ma opcji za ;)  Przeczytaj ją uważnie ^^
komentarz 4 listopada 2015 przez event15 Szeryf (93,790 p.)
@MichałCośtam, poczytaj o IoC, Dependency Injection i znajdź na forum temat, czemu singleton jest be. Singleton to taka klasa globalna. Ogólnie używanie globali to cecha osób bardzo słabych w fachu i jeżeli ktoś tego używa to musi mieć mega wytłumaczenie (już najlepiej od razu nad użyciem w komentarzu) dlaczego to stosuje i czy próbował innych podejść.
+1 głos
odpowiedź 3 listopada 2015 przez notabigthreat Mądrala (7,060 p.)
Pojawia się zagrożenie w postaci małej przewidywalności całej reszty, która używa tej zmiennej.

Za:
pierwszym razem - zadziałało.
drugim razem - zadziałało.
...
dwunastym razem - zadziałało.
...
Za piętnastym razem zmienna globalna miała jakoś nie tą wartość i wszystko powariowało.
–1 głos
odpowiedź 22 lutego 2016 przez jpacanowski VIP (101,940 p.)
  • w przypadku programów wielowątkowych, zmienna taka może być modyfikowana przez dowolny wątek, co prowadzić może do nieokreśloności przy braku synchronizacji wątków
  • jeśli funkcja używa zmiennej globalnej jako zmiennej pomocniczej, niemożliwe może być jej rekursywne wywołanie
  • zmienne globalne zaśmiecają przestrzeń nazw, w niektórych architekturach może to doprowadzić do przepełnienia stosu
  • na działanie danej części kodu może mieć wpływ kod zupełnie niezwiązany, o ile oba używają tej samej zmiennej globalnej i jeden z nich ją modyfikuje
  • zmienne globalne mogą kolidować ze zmiennymi lokalnymi (te drugie przesłaniają zmienne globalne o ile posiadają identyczne nazwy)

W wielu sytuacjach nie da się uniknąć istnienia zmiennych globalnych - np. w programach języka C przeznaczonych na architektury nie posiadające możliwości dynamicznej alokacji pamięci. Stosowanie tam zmiennych globalnych jest jedynym możliwym sposobem na przekazanie większej liczby parametrów z jednej funkcji do drugiej. 

Podobne pytania

0 głosów
2 odpowiedzi 350 wizyt
pytanie zadane 21 grudnia 2018 w PHP przez qardes Nowicjusz (120 p.)
0 głosów
1 odpowiedź 209 wizyt
pytanie zadane 25 lipca 2019 w JavaScript przez Whereismycode Obywatel (1,710 p.)
–1 głos
0 odpowiedzi 336 wizyt
pytanie zadane 22 lutego 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

92,568 zapytań

141,424 odpowiedzi

319,632 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...