Php 声明全局数组

Php 声明全局数组,php,globals,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)

嗨。我最近学习了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]);
  }
}
global$second\u数组;
$second_array=array();
功能II($v){
$var1=$second_数组[计数($second_数组)-1];
$var2=$second_数组[计数($second_数组)-2];
$rez=null;
echo$var1.$var2.“este?”;
}
对于($i=0;$i
我似乎能够在for循环中使用
$second\u数组
,但无法在operatii函数中使用它。

如何解决这个问题?

正如大家所建议的,您应该将数组作为函数参数传递。在重大情况下使用globals是一种不好的做法

            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]);
                }
            }
函数运算符ii($second_数组,$v){
$var1=$second_数组[计数($second_数组)-1];
$var2=$second_数组[计数($second_数组)-2];
$rez=null;
echo$var1.$var2.“este?”;
}
$second_array=array();
对于($i=0;$i
在PHP中引用全局变量有两种方法:

  • 在使用变量的每个函数的开头使用
    global
    关键字
  • 使用
    $GLOBALS
    数组
  • 在这些变量中,我建议坚持第二个,因为它在任何时候都绝对清楚变量是全局变量

    globals的一个问题是跟踪它们在哪里被使用;使用
    $GLOBALS
    数组在一定程度上缓解了此问题

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

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

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

    因此,总结如下:

    如果必须使用globals,请使用
    $globals['varname']
    引用它们,但通常最好不要使用它们


    希望这能有所帮助。

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

    在本例中,变量$second_数组被声明为全局数组,而不是在下一行中创建的数组。要避免这种情况,请确保全局声明位于数组声明之后。我倾向于将全局声明放在函数本身中

    $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]);
        }
    }
    
    $second_array=array();
    功能II($v){
    全局$second_数组;
    $var1=$second_数组[计数($second_数组)-1];
    $var2=$second_数组[计数($second_数组)-2];
    $rez=null;
    echo$var1.$var2.“este?”;
    }
    对于($i=0;$i
    如果要在函数内部访问它,请将其作为参数传递。需要在函数内部使用
    global
    关键字,而不是在函数外部。或作为参数传递,或使用
    $GLOBALS['second\u array']