Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Alternatywa dla global w funkcach
michat34
post 4.11.2012, 17:54:20
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
nospor
post 4.11.2012, 17:55:51
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Funkcję mogą przyjmować parametry. Poczytaj o tym, bo to podstawa.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
michat34
post 4.11.2012, 18:26:52
Post #3





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


  1. function alert (&$str)
  2. {
  3. echo $str;
  4. }


?
Go to the top of the page
+Quote Post
nospor
post 4.11.2012, 18:53:30
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak, ale ta referencja jest nieptrzebna


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
michat34
post 4.11.2012, 22:53:44
Post #5





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
abort
post 4.11.2012, 23:10:55
Post #6





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 00:53