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

42 Warsaw Coding Academy
+5 głosów
3,919 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 517 wizyt
pytanie zadane 21 grudnia 2018 w PHP przez qardes Nowicjusz (120 p.)
0 głosów
1 odpowiedź 269 wizyt
pytanie zadane 25 lipca 2019 w JavaScript przez Whereismycode Obywatel (1,710 p.)
–1 głos
0 odpowiedzi 380 wizyt
pytanie zadane 22 lutego 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

93,376 zapytań

142,377 odpowiedzi

322,517 komentarzy

62,724 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...