2011-05-06 218 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']); 
}