2011-05-06 172 views
5

我想知道如果我有这样的功能:PHP函数变量范围

function isAdmin ($user_id) { 

    $admin_arr = array(1, 2); 

    foreach ($admin_arr as $value) { 

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

    return false; 
} 

我能制造阵列该函数的外部作为一个全局数组,并用它在函数内部,而无需通过发送它作为一个参数,也可以在函数内声明一个新的管理数组,就像我刚刚做的那样?我将如何做到这一点?

问候, 亚历山大

+0

为什么要这样?这是可能的,但不推荐。 – Ikke 2011-05-06 13:22:56

+0

是的,你可以,但尽可能避免'全球'。将它传递给函数有什么问题? – 2011-05-06 13:23:21

+0

我认为你可以使用define()使它成为一个常量,如果该数组实际上是一个常量。 – albb 2011-05-06 13:28:04

回答

12

要回答的文字问题:这里

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

文档: http://php.net/manual/en/language.variables.scope.php

回答真正的问题:不惜一切代价避免全球化。您正在向应用程序中引入大量容易出错的代码。依赖于全局变量正在进入一个痛苦的世界,使你的功能变得不那么有用。

避免它,除非你绝对看不到其他方式。

+2

+1,因为它指出这毕竟是一个糟糕的想法。 – halfdan 2011-05-06 13:28:05

+2

+1为“痛苦的世界”:D – KingCrunch 2011-05-06 13:29:33

1

你必须要做到这一点与全球关键字

这里的例子

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

我同意别人的看法,这不是首选的方法,你应该将数组作为参数传递,但我只想指出$GLOBALS[]超全局数组,我发现它比global更具可读性关键词。

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

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