2011-05-06 9 views
5

Me preguntaba si tengo una función como esta:función php ámbito de las variables

function isAdmin ($user_id) { 

    $admin_arr = array(1, 2); 

    foreach ($admin_arr as $value) { 

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

    return false; 
} 

podría hacer un arreglo fuera de esa función como una matriz global y usarla dentro de la función sin enviarlo a través de una parámetro, también en lugar de declarar una nueva matriz de administración dentro de la función como acabo de hacer arriba? ¿Cómo haría esto?

Saludos, Alexander

+0

¿Por qué quiere esto? Es posible, pero no recomendado. – Ikke

+0

Sí, podría, pero evite 'global's tanto como sea posible. ¿Cuál es el problema al pasarlo a la función? –

+0

Creo que puede usar define() para hacerlo como una constante si esa matriz es en realidad una constante. – albb

Respuesta

12

Para responder a la pregunta literal:

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

Documentación aquí: http://php.net/manual/en/language.variables.scope.php

Para responder a la pregunta REAL: Evite global a toda costa. Está introduciendo una plétora de código propenso a errores en su aplicación. Confiar en variables globales es entrar en un mundo de dolor y hace que sus funciones sean menos útiles.

Evítalo a menos que absolutamente no lo veas de otra manera.

+2

+1 para señalar que esta es una idea horrible después de todo. – halfdan

+2

+1 para el "mundo del dolor": D – KingCrunch

1

que tienen que ver esto con la palabra clave mundial

aquí un ejemplo

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

Estoy de acuerdo con otros en que esta no es la forma preferida de hacerlo, y debe pasar la matriz como parámetro, pero solo quería señalar la matriz superglobal $GLOBALS[], que me resulta más legible que la global palabra clave.

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

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