声明全局数组

2022-08-30 22:00:14

你好。我最近学习了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 循环中使用 ,但不能在 operatii 函数中使用它。
我该如何解决这个问题?$second_array


答案 1

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

  1. 在使用该变量的每个函数的开头使用关键字。global
  2. 使用数组。$GLOBALS

其中,我建议坚持使用第二个,因为它始终绝对清楚地表明变量是全局变量。

全球处理器的问题之一是跟踪它们的使用位置;使用阵列可在一定程度上缓解此问题。$GLOBALS

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

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

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

总结一下:

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

希望有所帮助。


答案 2

对于在谷歌搜索中遇到这个老问题的其他任何人,

在此示例中,变量 $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]);
    }
}

推荐