2011-05-06 20 views
5

Mi chiedevo se ho una funzione come questa:funzione php portata variabile

function isAdmin ($user_id) { 

    $admin_arr = array(1, 2); 

    foreach ($admin_arr as $value) { 

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

    return false; 
} 

Posso creare un array di fuori di tale funzione come una matrice globale e utilizzarlo all'interno della funzione senza inviarlo attraverso come parametro, anche dichiarando invece un nuovo array admin all'interno della funzione come ho appena fatto sopra? Come lo farei?

saluti, Alexander

+0

Perché lo vuoi? È possibile, ma non raccomandato. – Ikke

+0

Sì, si potrebbe, ma evitare il più possibile il 'global's. Qual è il problema con il passaggio alla funzione? –

+0

Penso che si possa usare define() per farlo come costante se quella matrice è effettivamente una costante. – albb

risposta

12

Per rispondere alla domanda letterale:

// 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; 
} 

documentazione qui: http://php.net/manual/en/language.variables.scope.php

Per rispondere alla domanda REALE: evitare a tutti i costi a livello globale. Stai introducendo una pletora di codice soggetto a errori nella tua applicazione. Affidarsi a variabili globali sta entrando in un mondo di dolore e rende le tue funzioni meno utili.

Evitatelo a meno che non si veda assolutamente altro.

+2

+1 per sottolineare che questa è una pessima idea dopotutto. – halfdan

+2

+1 per il "mondo del dolore": D – KingCrunch

1

si hanno a che fare questo con la parola chiave global

qui un esempio

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

Concordo con altri che questo non è il modo preferito per farlo, e dovresti passare l'array come parametro, ma volevo solo indicare l'array superglobal $GLOBALS[], che trovo più leggibile dello global parola chiave.

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

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