2010-12-11 11 views
9

私は2つの異なるファイルで機能する必要があります。それらの 1は、各時間が呼ばれる配列に新しいアイテムを追加する必要がありますし、私はそれがあるためにした.what配列にアクセスする必要があります:PHPのグローバル配列

function1(){ 

    global $array; 

    $array[] = 'hi'; 

} 

が、それはちょうど私がこれをコールしても、配列内の1つのアイテムを作成します機能4回。

+0

[グローバルはほとんど常に悪い](http://c2.com/cgi/wiki?GlobalVariablesAreBad)に注意してください。 – outis

答えて

11

あなたがしたことはうまくいくはずです。

<?php 

function function1(){ 

    global $array; 

    $array[] = 'hi'; 

} 
function1(); 
function1(); 
function1(); 
print_r($array); 

Test it.

あなたはおそらく別の問題を抱えています。すべての変数の有効期間は、スクリプトの現在の実行時間であることに注意してください。彼らは連続して実行されることはありません。そのためには、セッション、Cookie、ファイルシステム、データベースなどの永続性を使用する必要があります。

詳細については、完全なコードを投稿してください。

+0

okですので、it.thanksのためにセッションを使用することをお勧めします。 –

+2

したがって、複数回の呼び出しは同じ実行では実行されませんでしたか?問題は正しいと思いましたか? –

+0

はいAlin、関数は新しいhttp要求で実行されます。同じrun.itで呼び出さなかったのは私の失敗でした。 –

5

質問の文句で少し混乱しています。あなたは「私は2つの異なるファイルで機能しなければならない」と言うとき。 「2つの」機能を持っているということですか?

$ array変数を使用する2つの関数がある場合は、両方の関数でglobal $array;を呼び出す必要があります。

この理由は、globalが少し誤解を招くからです。実際には、$_GLOBALSのメンバーへの参照を$ _GLOBALSインデックスと同じ名前のローカルスコープの変数に代入しています。あなたはこのような何か言い換えれば、:

global $variable; 

それは、基本的にこれを言っと同じことだ:

$variable =& $_GLOBALS['variable']; (assign by reference) 

実際の変数$variableはまだ関数レベルでスコープされ、それだけではどうなりますグローバル変数への参照を持つ。

これは、すべての関数にglobal $variableを定義しないと、その関数のスコープ内に全く新しい変数を作成していることになります。関数が終了すると、変数は設定されず、関数内で行われた変更はすべて失われます。

これらのことはすべて、グローバル変数は依然として悪い考えです。ローカル変数を維持し、それを必要に応じて他の関数にパラメータとして渡すだけでは、はるかに明確になります。

+0

ありがとう、私の問題は今解決される。 –

+0

'$ _GLOBALS'ではなく' $ GLOBALS'でなければなりません。 –