2011-05-06 14 views
5

Zastanawiałem się, czy mam funkcję tak:funkcja php zmienna zakres

function isAdmin ($user_id) { 

    $admin_arr = array(1, 2); 

    foreach ($admin_arr as $value) { 

     if ($value == $user_id) { 
      return true; 
     } 
    } 

    return false; 
} 

mogłem zrobić tablicę poza tym funkcję jako globalnej tablicy i używać go wewnątrz funkcji bez konieczności wysyłania go przez jako parametr, również zamiast deklarowania nowej tablicy administracyjnej wewnątrz funkcji, tak jak powyżej? Jak mógłbym to zrobić?

Pozdrawiam, Alexander

+0

Dlaczego tego chcesz? Jest to możliwe, ale nie zalecane. – Ikke

+0

Tak, można, ale unikać "globalnych" jak najwięcej. Jaki jest problem z przekazaniem go do funkcji? –

+0

Myślę, że możesz użyć funkcji define(), aby stała się stała, jeśli ta tablica jest w rzeczywistości stała. – albb

Odpowiedz

12

Aby odpowiedzieć dosłownego pytanie:

// Global variable 
$admin_arr = array(1, 2); 

function isAdmin ($user_id) { 

    // Declare global 
    global $admin_arr; 

    foreach ($admin_arr as $value) { 

     if ($value == $user_id) { 
      return true; 
     } 
    } 

return false; 
} 

Dokumentacja tutaj: http://php.net/manual/en/language.variables.scope.php

Aby odpowiedzieć na PRAWDZIWE pytanie: Unikaj globalnych za wszelką cenę. Wprowadzasz mnóstwo podatnych na błędy kodów do swojej aplikacji. Opieranie się na zmiennych globalnych wkracza w świat bólu i sprawia, że ​​twoje funkcje są mniej przydatne.

Unikaj tego, chyba że absolutnie nie widzisz innej drogi.

+2

+1 za wskazanie, że jest to po prostu nieudany pomysł. – halfdan

+2

+1 za "świat bólu": D – KingCrunch

1

trzeba zrobić z globalnym hasła

tutaj przykład

$arr = array('bar'); 
function foo() { 
    global $arr; 
    echo array_pop($arr); 
} 
foo(); 
1

Zgadzam się z innymi, że nie jest to preferowany sposób na to, i powinieneś przekazać tablicę jako parametr, ale chciałem tylko wskazać superglobalną macierz $GLOBALS[], którą uważam za bardziej czytelną niż global słowo kluczowe.

$global_array = array(1,2,3); 

function myfunc() 
{ 
    echo $GLOBALS['global_array'][0]; 
    print_r($GLOBALS['global_array']); 
}