2011-05-06 15 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; 
} 

iはグローバルな配列として、その関数の外で列を作り、としてそれを通じ送信することなく、関数内でそれを使用することができますパラメータの代わりに、私は上記のように、関数内に新しい管理配列を宣言しますか?どうすればいい?ここ

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

ドキュメント:

よろしく、 アレクサンダー

+0

は、なぜあなたはこれをしたいですか?可能ですが、お勧めしません。 – Ikke

+0

はい、できますが、可能な限りグローバルなものは避けてください。それを関数に渡す際の問題は何ですか? –

+0

配列を実際に定数にする場合は、define()を使って定数にすることができると思います。 – albb

答えて

12

でこれを行う必要があります: http://php.net/manual/en/language.variables.scope.php

REALの質問に答えるには:すべてのコストをかけてグローバルを避けてください。アプリケーションにエラーが発生しやすいコードを多数導入しています。グローバル変数に頼っていると、痛みの世界に入り、機能があまり役に立たなくなります。

あなたは絶対に他の方法を見ていない場合を除き、それを避けてください。

+2

+1を定義することはできません。 – halfdan

+2

+1「痛みの世界」:D – KingCrunch

1

あなたは文字通りの質問に答えるためにグローバルなキーワードをここに

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

これは、これを行うのが好ましい方法ではないことに同意します。配列をパラメータとして渡す必要がありますが、globalよりも読みやすいと思われる$GLOBALS[]スーパーグローバル配列を指摘したかっただけです。キーワード。

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

function myfunc() 
{ 
    echo $GLOBALS['global_array'][0]; 
    print_r($GLOBALS['global_array']); 
} 
関連する問題