Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziedziczenie zmiennych
Forum PHP.pl > Forum > PHP
Czeladnik
Witajcie,

mam problem dotyczący: http://php.net/manual/en/language.variables.scope.php

Chcę zrobić funkcje:
  1.  
  2. function funkcja()
  3. {
  4. global $cos;
  5. if(empty($cos))
  6. {
  7. $cos = 5;
  8. }
  9. }
  10.  
  11. Teraz przechodzimy do senda:
  12. funkcja();
  13.  
  14. Ale tutaj nadal $cos == 0


Chodzi ogólnie o to, że przed funkcja funkcja() nie ma określonej zmiennej globalnej $cos, ale po tym już jest.

Nie chodzi mi o rozwiązanie typu return $cos;, a później $cos = funkcja(). Futaj jest problem taki, że to ma być hook do mybb, gdzie nie ma dokładnej definicji tego.


Proszę o pomoc.


edit: Chcę jeszcze dopisać, że to raczej ma być coś w stylu, tworzenia przez funkcję nowej zmiennej, która będzie widoczna wszędzie...
konole
Dzwine, mi twój skrypt:
Kod
<?php

function funkcja()
{
global $cos;
if(empty($cos))
{
$cos = 5;
}
}


funkcja();
echo $cos;



zwraca 5.
thek
Używanie globali w funkcjach to niedobra praktyka. Jeśli chcesz mieć zmienną poza zasięgiem funkcji - zwróć ją w return. Jeśli ma to być wiele zmiennych - zwróć je jako tablicę. A jeśli funkcja sama korzysta z wartości spoza funkcji - przekaż je jako parametr. Tak się obecnie robi i powinno robić. Global jest złe bo powoduje chaos, gdyż nie wiadomo co się skąd wzięło i co tak naprawdę zawiera. A gdy jeszcze rżne funkcje w kodzie mogą ją zmieniać - to dopiero masz burdel i nie dojdziesz co i jak smile.gif
jarmiar
a może warto było by skorzystać z referencji? dobrze myślę?
thek
Referencja to jest jakiś pomysł na rozwiązanie, ale trzeba z nią uważać z tego samego powodu co z global: możemy się zgubić w tym gdzie zmienną jako referencję nadpisaliśmy. Dlatego początkującym bezpieczniej jest nie dawać tego do ręki wink.gif Wspomnieć można gdy już nieco do wprawy dojdą.
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.