18

やあ。私は最近 PHP を学び、関数内にアクセスできるようにグローバル配列を宣言しようとしています。しかし、「未定義の変数:」というエラーが表示されるため、何かが足りないようです。

これが私のコードです:

global $second_array;
$second_array = array();

function operatii($v) {
  $var1 = $second_array[count($second_array)-1];
  $var2 = $second_array[count($second_array)-2];
  $rez = null;

  echo $var1 . $var2 . "este?";
}

for ($i = 0; $i < count($a); $i++){
  if ($a[$i] === "+" || $a[$i] === "-" || $a[$i] === "*" || $a[$i] === "/" ) {
    operatii($a[$i]);
  } else {
    array_push($second_array, $a[$i]);
  }
}

forループでは使えそう$second_arrayなのですが、operatii関数では使えません。
どうすればこの問題を解決できますか?

4

3 に答える 3

22

PHP でグローバル変数を参照するには、次の 2 つの方法があります。

  1. 変数を使用globalするすべての関数の先頭でキーワードを使用します。
  2. $GLOBALS配列を使用します。

これらのうち、変数がグローバルであることを常に完全に明確にするため、2 番目の変数を使用することをお勧めします。

グローバルに関する問題の 1 つは、グローバルが使用されている場所を追跡することです。配列を使用すると、$GLOBALSこの問題がある程度軽減されます。

ただし、グローバルの使用にはまだ問題があります。一般に、コードであまりにも多くのグローバルを使用することは不適切な方法と考えられています。グローバルを広範に使用する多くのレガシー システムを扱ってきた経験から、将来の開発者にとって多くの頭痛の種になる可能性があるという事実を保証できます。

また、グローバルを使用すると、コードの正式なテスト スイート (つまり、単体テスト) を作成するのが難しくなります。

したがって、可能な限りグローバルを使用しないことをお勧めします。これらは場合によっては必要になりますが、それらを回避し、変数をグローバルにするのではなく関数やクラスに渡すことができればできるほど、より良い結果が得られます。

要約すると:

グローバルを使用する必要がある場合は、 で参照しますが$GLOBALS['varname']、通常はまったく使用しない方がよいでしょう。

それが役立つことを願っています。

于 2012-10-13T19:39:14.080 に答える
6

Google検索でこの古い質問にぶつかった他の人にとっては、

この例では、変数 $second_array がグローバルとして宣言されており、次の行で作成された配列ではありません。これを回避するには、グローバル宣言が配列宣言の後にあることを確認してください。私の好みは、関数自体にグローバル宣言を入れることです。

$second_array = array();

function operatii($v) {

    global $second_array;  

    $var1 = $second_array[count($second_array)-1];
    $var2 = $second_array[count($second_array)-2];
    $rez = null;

    echo $var1 . $var2 . "este?";
}

for ($i = 0; $i < count($a); $i++){
    if ($a[$i] === "+" || $a[$i] === "-" || $a[$i] === "*" || $a[$i] === "/" ) {
        operatii($a[$i]);
    } else {
        array_push($second_array, $a[$i]);
    }
}
于 2016-04-18T09:34:07.580 に答える
5

誰もが提案したように、配列を関数パラメーターとして渡す必要があります。グローバルを使用することは、主要なケースでは悪い習慣です。

            function operatii($second_array, $v) {
                $var1 = $second_array[count($second_array)-1];
                $var2 = $second_array[count($second_array)-2];
                $rez = null;
                echo $var1 . $var2 . "este?";
            }

            $second_array = array();

            for ($i = 0; $i < count($a); $i++) {
                if ($a[$i] === "+" || $a[$i] === "-" || $a[$i] === "*" || $a[$i] === "/" ) {
                    operatii($second_array, $a[$i]);
                } else {
                    array_push($second_array, $a[$i]);
                }
            }
于 2012-10-13T19:30:59.497 に答える