web-dev-qa-db-ja.com

PHPのグローバル配列

2つの異なるファイルで機能する必要があります。それらの1つは、呼び出されるたびに新しい項目を配列に追加する必要があり、配列はアクセス可能である必要があります。

function1(){

   global $array;

   $array[] = 'hi';

}

しかし、この関数を4回呼び出しても、配列に1つの項目が作成されるだけです。

9
hd.

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

<?php

function function1(){

   global $array;

   $array[] = 'hi';

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

テストしてください

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

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

11
Alin Purcaru

私はあなたの質問の文言に少し混乱しています。 「2つの異なるファイルで機能する必要がある」と言うとき。 「2つの」機能があるということですか?

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

これは、globalが少し誤解を招くためです。実際に行っているのは、$_GLOBALSのメンバーへの参照を、$ _ GLOBALSインデックスと同じ名前を持つローカルスコープの変数に割り当てることだけです。つまり、次のようなことをすると:

 global $variable;

これは基本的にこれと同じことです。

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

実際の変数$variableはまだ関数レベルでスコープされており、たまたまグローバル変数への参照があります。

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

以上のことすべてを踏まえても、グローバル変数は依然として悪い考えである傾向があります。ローカル変数を維持し、必要に応じてパラメーターとして他の関数に渡すと、より明確になります。

5
AgentConundrum