Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Alternatywa dla global w funkcach
Forum PHP.pl > Forum > Przedszkole
michat34
witam, w tym kodzie wywolujac funkcje alert nie dostaniemy nic bo funkcja nie 'widzi' zmiennej $str
  1. <?php
  2. $str = 'Hello World';
  3.  
  4. function alert ()
  5. {
  6. echo $str;
  7. }
  8.  
  9. alert();


moje pytanie jest nastepujace. czesto potrzebuje uzyc jakiejs zmiennej w funkcji ktora jest zadeklarowana wczesniej. jedyny sposob jaki znam by to obejsc to uzycie global przed zmienna, ale jest to zla praktyka programistyczna, wiec wolalbym tego unikac. tak wiec jaki jest sposob na modyfikacje powyzszego kodu tak aby wyswietlil mi napis HW? jakas referencja moze?
nospor
Funkcję mogą przyjmować parametry. Poczytaj o tym, bo to podstawa.
michat34
  1. function alert (&$str)
  2. {
  3. echo $str;
  4. }


?
nospor
Tak, ale ta referencja jest nieptrzebna
michat34
ale bez refernecji zeby mi cos wypisał bede musial przy kazdym jej wywołaniu podac co chce wypisac. a mi wlasnie chodzi o to zeby on to co ma wypisac pobrałz wczesnie jzadeklarowanej zmiennej $str wink.gif
abort
Nie, to nie tak działa.
Mając dwie funkcje zdefiniowane jak ponizej:
Kod
function a (&$str)
function b ($str)

Możesz swobodnie zmieniać wartość $str tylko w funkcji b - bo podczas wywoływania funkcji b jest tworzona lokalna kopia zmiennej $str (KOPIA - czyli zawiera to samo, co "poziom wyżej", czyli tam, skąd była wywołana). Jeśli zmienisz wartość $str w funkcji a, to zmienisz ją także w programie. Tak to mniej więcej działa.
Poczytaj o czymś takim jak zasięg zmiennych czy też o przekazywaniu zmiennych przez referencję.

Ewentualnie zrób dwie IDENTYCZNE funkcje z parametrem (np. tak jak wyżej) i w ciele funkcji zmieniaj ten parametr - a po wyjściu z funkcji wypisz sobie go ponownie. Zobaczysz różnicę.

Generalnie uważam, że pisanie funkcji z przekazywaniem zmiennych przez referencję powinno być jak najrzadziej używane (choć czasami bywa pożyteczne).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.