声明全局数组

时间:2012-10-13 19:26:15

标签: php globals

您好。我最近学习了PHP并试图声明一个全局数组,因此我可以访问函数内部。但我似乎错过了一些东西,因为我收到了错误'Undefined variable:'

这是我的代码:

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函数中使用它。
我该如何解决这个问题?

3 个答案:

答案 0 :(得分:17)

在PHP中引用全局变量有两种方法:

  1. 在使用该变量的每个函数的开头使用global关键字。
  2. 使用$GLOBALS数组。
  3. 其中,我建议坚持使用第二个,因为它始终清楚地表明变量是全局变量。

    全局变量的一个问题是跟踪它们的使用位置;使用$GLOBALS数组可以在一定程度上缓解这个问题。

    但是,使用全局变量仍存在问题;在代码中使用过多的全局变量通常被认为是不好的做法。在广泛使用全局变量的许多遗留系统之后,我可以保证它们可能会给未来的开发人员带来很多麻烦。

    使用全局变量也会使为代码编写正式的测试套件变得更加困难(即单元测试)。

    因此,我的建议是尽可能避免使用全局变量。在某些情况下它们是必要的,但是你可以越多地避免它们,而是将变量传递到你的函数和类中,而不是将它们变为全局变量,这将是更好的事情。

    总结一下:

    如果你必须使用全局变量,请用$GLOBALS['varname']引用它们,但通常最好不要使用它们。

    希望有所帮助。

答案 1 :(得分:6)

关于每个人的建议,你应该将你的数组作为函数参数传递。在重大案例中使用全局变量是一种不好的做法。

            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]);
                }
            }

答案 2 :(得分:3)

对于在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]);
    }
}