![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Witam!
Czy sa jakies roznice (wydajnosc, bezpieczenstwo, wylaczajac zasieg) w operowaniu na zmiennych przez superglobalna $GLOBALS a wczesniejsza jej 'globalizacja' przez global? -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
a global to nie jest po prostu umieszczenie zmiennej w tablicy GLOBALS ?
![]() -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Chyba nie...
Mam gdzies zmienna poza funkcja. I chce teraz ja powiedzmy odczytac. Lepiej bedzie przez global czy $GLOBALS? W $GLOBALS jest zawsze, ale mam tak skonstruowany kod, ze do zmiennej 'dojezdzam' dlugim autobusem... -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
zmienne które z natury mają zasięg globalny to takie których nie definiujesz wewnątrz funkcji, metody, które nie są wartościami w klasie. Zmienne te będziesz miał dostępne w tablicy $GLOBALS, czy zadeklarujesz je tam jawnie ($GLOBALS['a'] = 'b';) czy nie ($a = 'b'; -> tu oczywiście deklaracja musi być tam gdzie zasięg jest globalny).
Pomijając fakt, że powinno się dążyć do programowania w taki sposób aby korzystanie z globalnych zmiennych przez $GLOBALS czy global $zmienna nie było konieczne, jedyna różnica jaką widzę to wygoda. Potrzebując w funkcji dużo zmiennych globalnyych musisz o nich wszystkich pamiętać i zadeklarować je jako globalne:
Używając tablicy $GLOBALS nie musisz deklarować potrzebnych zmiennych jako globalne, bo jawnie korzystasz z nich jako globalnych ($GLOBALS['var1']). Skorzystanie z $GLOBALS wydaje mi się wpłynie też na czytelnośc kodu, bo ktoś (nawet ty sam po jakimś czasie) spoglądając na kod odrazu będzie wiedział skąd wzięły się dane zmienne. pozdr. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat jedyna różnica jaką widzę to wygoda no i o taka odpowiedz mi chodzilo a wracajac - w moim projekcie globalem byloby lepiej, bo musze powtarzac $GLOBALS praktycznie w kazdej linijce, a zmienna dostepna globalnie, to tablica. Thx ![]() Ten post edytował erix 18.06.2006, 12:32:04 -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
(...) w moim projekcie globalem byloby lepiej, bo musze powtarzac $GLOBALS praktycznie w kazdej linijce... Wywal ten projekt do kosza i zacznij pisać jeszcze raz. Korzystanie ze zmienny globalnych to ostateczność. Całkowita ostateczność, nie powinno się z nich korzystać. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
UZASADNIJ.
Chodzi o to, ze mam zestaw klas i chce sie do jednej z nich odwolac z funkcji innej. Tak OT, to gdybys z wewnatrz jakiejkolwiek klasy chcial odwolac sie do, dajmy na to, warstwy sql, to chyba inaczej nie daloby sie, nie? Ten post edytował erix 18.06.2006, 12:40:42 -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o to, ze mam zestaw klas i chce sie do jednej z nich odwolac z funkcji innej. Tworzysz instancję klasy wewnątrz innej klasy i wywołujesz metodę. Albo wywołujesz metodę statycznie o ile można to zrobić. Tak OT, to gdybys z wewnatrz jakiejkolwiek klasy chcial odwolac sie do, dajmy na to, warstwy sql, to chyba inaczej nie daloby sie, nie? Dlaczego? Piszesz klasę na wzorcu singleton i tam gdzie chcesz to sobie pobierasz połączenie. Od lat tak robię. Zresztą od lat pisze duże projekty i ostatni raz kiedy musiałem zastosować zmienne globalne to było ... nidgy. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
ale wciaz nie wiem dlaczego NIE STOSOWAC zmiennych globalnych... :/
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat le wciaz nie wiem dlaczego NIE STOSOWAC zmiennych globalnych... :/ Myślę, że mamy tu pewne niezrozumienie. Zmiennych globalnych nie należy stosować ze względów przejrzystości kodu, łatwości modyfikacji. Z kodu powinno wynikać co skąd się bierze. Nie znam się na teorii programowania, ale wiem że korzystanie ze zmiennych globalnych przeczy np. istocie funkcji jako takich. Po co jest funkcja? Po to, żeby zebrać pewne czestwo powtarzane fragmenty kodu w jej ramach i zapewnić sobie łatwy dostęp do tych czynności. Stosując zmienne globalne przeczysz temu, bo musiałbyć w każdym fragmencie kodu w którym chcesz użyć danej funkcji zadbać o to żeby te globalne zeminne istniały i w efekcie funkja działała poprawnie. Po to się do funkji przekazuje parametry i po to funkcja zwraca wartość, żeby nie trzeba było uzależniać jej od danych bezpośrednio nie związanych z jej zadaniem. Jeżeli natomiast funkcja jest używana tyklo w jednym miejscu, gdzie masz utworzone potrzebne zmienne globalne, wtedy... nie potrzebujesz do tego zadania funkji :) Należy natomiast wyłączyć register_globals, co spodowuje że nie będzie autmatycznie ze zmiennej $_GET['wanda'] tworzona zmienna $wanda. Tu akurat może mieć to zasadniczy wpływ na bezpieczeństwo twojego skryptu. pozdr. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
Zmiennych globalnych nie powinno sie stosowac, poniewaz w duzych projektach w koncu doprowadzi to w pewnym miejscu do kolizji nazw zmiennych. W przypadku gdy wiele osob pracuje nad projektem, w wynikach zacznie sie pojawiac taki meksyk, ze przez miesiac nie dojdziecie dlaczego.
Sa pewne zasady programowania, ktorych programista powinien przestrzegac.. w kazdej szanujacej ksiazce o php o tym przeczytasz erix. Pozdrawiam. -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
To juz chyba standard, zeby nie korzystac z register_globals; nawet nie mysle o tym
![]() Ale, jak dla mnie, wygodniej bedzie z global $var, bo trzeba mi TYLKO jedna tablice zglobalizowac. A bawic sie z rzutowaniem? BTW: zapomnialem napisac, ze PHP4, nie 5 ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
bynajmniej nie mowimy tutaj o register_globals, ale u uzywaniu global" title="Zobacz w manualu php" target="_manual.
-------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
em1X, nadmienilem do siemakuba
to bylo tak OT... -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
![]() ![]() na przyszlosc pamietaj, ze wszelkie problemy globalizacji rozwiazuje Singleton. A takie rozwiazywanie problemow swiadczy juz o pewnej dojrzalosci w programowaniu (samodoskonalenie się). -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
To juz chyba standard, zeby nie korzystac z register_globals; nawet nie mysle o tym :D rajt, wspomniałem o tym żeby nie było wątpliwości ;)Ale, jak dla mnie, wygodniej bedzie z global $var, bo trzeba mi TYLKO jedna tablice zglobalizowac. Moje zdanie jest takie, że najlepiej zaprogramować tak, żeby nie trzeba było uzywać global. Ale z drugiej strony jest on po to, żeby go uzyć tam gdzie nie da się inaczej ;>BTW, skoro to tylko jedna tablica to jaki problem przekazać ją jako parametr? Jeżeli chcesz w funkcji zmieniać wartości tej tablicy a nie tylko korzystać z danych w niej zawartych, przekaż ją jako referencję.
pozdr. |
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
O zesz! Chodzila mi po glowie referencja, ale nazwy zapomnialem...
Po dyskusji z em1Xem doszedlem do wniosku, ze bedzie lepiej, jesli przejde na Singleton ![]() EOT -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
Moze inni wyciągną wnioski co jest lepsze i wygodniejsze.
Link do wzorca Property dla wersji PHP5 Use case:
Ten post edytował em1X 18.06.2006, 14:35:53 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Jeszcze do tego linka: w przykladzie dla PHP4 wywala bledy, zadzialalo dopiero to: http://webcity.pl/webcity/artykuly.php/t/62 Wreszcie zrozumialem o co w tym naprawde chodzi. Dziekuje! -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 17:59 |