2010-11-08 18 views
29

Próbuję zmienić zmienną, która jest poza funkcją, z poziomu funkcji. Ponieważ jeśli data sprawdzania funkcji przekracza pewną ilość, potrzebuję jej do zmiany roku dla daty na początku kodu.Zmiana zmiennej globalnej z wewnątrz funkcji PHP

$var = "01-01-10"; 
function checkdate(){ 
    if("Condition"){ 
      $var = "01-01-11"; 
     } 
} 

Odpowiedz

38

A. Użyj słowa kluczowego global do importowania z zakresu aplikacji.

$var = "01-01-10"; 
function checkdate(){ 
    global $var; 
    if("Condition"){ 
     $var = "01-01-11"; 
    } 
} 
checkdate(); 

B. Użyj macierzy $GLOBALS.

$var = "01-01-10"; 
function checkdate(){ 
    if("Condition"){ 
     $GLOBALS['var'] = "01-01-11"; 
    } 
} 
checkdate(); 

C. Przekaż zmienną by reference.

$var = "01-01-10"; 
function checkdate(&$funcVar){ 
    if("Condition"){ 
     $funcVar = "01-01-11"; 
    } 
} 
checkdate($var); 
+0

Dla trzeciego przykładu (C), czy pierwsza i ostatnia linia odnoszą się do $ var lub $ funcVar ... czy ostatnia linia powinna być '$ var = checkdate ($ var);'? –

+2

@JeromyFrench Pierwsza i ostatnia linia odnoszą się do zmiennej z zewnętrznego zakresu o nazwie '$ var'.Wewnątrz tej funkcji może mieć dowolną inną nazwę, więc wybrałem '$ funcVar' specjalnie dla zilustrowania, że ​​nazwa może być inna. Odnośnie '$ var = checkdate ($ var); ', celem tego przykładu było pokazanie przejścia _by_referencji_ i zmiana przekazanej zmiennej bezpośrednio w funkcji. –

+2

Ok, myślę, że rozumiem. 'function checkdate (& $ funcVar) w połączeniu z' checkdate ($ var) 'odwzorowuje zewnętrzny' $ var' na wewnętrzny '$ funcVar'. –

44

Wystarczy użyć słowa kluczowego global tak:

$var = "01-01-10"; 
function checkdate(){ 
    global $var; 

    if("Condition"){ 
      $var = "01-01-11"; 
     } 
} 

Wszelkie odniesienia do tej zmiennej będzie do globalnej wtedy.

+0

ale chcę zmienić zmienną globalną, więc niezależnie od tego, co ustawić zmienną na, będzie efekt globalnej zmiennej poza funkcją? –

+4

To właśnie zrobi. Użycie 'global' zmienia zmienną' $ var' wewnątrz funkcji, aby wskazywała globalną. Po zmianie tej zmiennej wewnątrz funkcji zmieni ona globalną. – Buggabill

8

Wszystkie tutaj odpowiedzi są dobre, ale ... jesteś pewien, że chcesz to zrobić?

Zmiana zmiennych globalnych z poziomu funkcji jest generalnie złym pomysłem, ponieważ może bardzo łatwo spowodować, że kod spaghetti się wydarzy, w którym zmienne zmieniają się w całym systemie, funkcje są wzajemnie od siebie zależne itd. To jest prawdziwy bałagan .

Proszę pozwolić mi zaproponować kilka alternatyw:

1) Programowanie obiektowe

2) Mając funkcja zwraca wartość, która jest przypisana przez rozmówcę.

np. $ Zmienna = checkdate();

3) o wartości przechowywane w tablicy, która jest przekazywana do funkcji w odniesieniu

funkcji checkdate (& $ wartości) { if (m) { $ wartości [ "DATA" ] = "01-01-11"; } }

Mam nadzieję, że to pomoże.

+1

Alternatywa nr 2 to król. – Stephen

5

Spróbuj podanie przez odniesienie

$var = "01-01-10"; 
    function checkdate(&$funcVar){ 
     if("Condition"){ 
      $funcVar = "01-01-11"; 
     } 
    } 
    checkdate($var); 

lub Spróbuj samo jak powyżej, utrzymując funkcję, co tak samo.

$var = "01-01-10"; 
    function checkdate($funcVar){ 
     if("Condition"){ 
      $funcVar = "01-01-11"; 
     } 
    } 
    checkdate(&$var); 
Powiązane problemy