无法在if语句之外访问全局数组?

时间:2015-08-03 15:39:44

标签: php arrays scope global

我在php中设置全局数组时遇到了一些问题。我从$ _POST获得的数据直接来自我的数据库。我通过外部页面将它发送到JSON解码/等。 (该部分有效,所以我没有粘贴代码)。我只想在设置数据的情况下执行此操作,然后我想在其余代码中使用该数组并对其执行其他操作。我遇到的问题是if语句之外的数组是null。我似乎无法找出原因?如果我在if语句中回显var_dump,则值在GLOBALS ['数组']

 function is_assoc($array) {
   foreach (array_keys($array) as $k => $v) {
     if ($k !== $v)
      return true;
     }
     return false;
   }

$GLOBALS['Array'] = array(); 

if (isset($_POST['data'])) {
   $Data = $_POST['data'];

   $decode = new JSONdecoder($Data);
   $decode->decodeNew($Data);
   $Data = $decode->decodedArray;

   $decryptor = new DataDecryptor(base64_decode($_POST['key']), $_POST['tracking'], $hostName);
   $decodedData =  $decryptor->decrypt_arr($Data);

   foreach($decodedData as $key => $val){
      if(is_assoc($val)){
         foreach($val as $key2 => $val2){
            $theArray[$key2] = $val2;
         }      
      }else{
         $theArray[$key] = $val;
      }
    }

 $GLOBALS['Array'] = $theArray;
}
echo var_Dump($Array);

1 个答案:

答案 0 :(得分:0)

您的问题出在其他地方。 $ GLOBALS是一个可从任何范围访问的超全局变量。

在$ GLOBALS中定义新条目时,它会自动创建一个具有相同名称的变量,但该变量仅在该特定范围内可见。如果您在另一个范围内并且想要将其初始化为变量,则需要使用global关键字:global $var;(请查看下面的代码示例 - 在test()内功能)。

你确定100%你总是做同样的测试吗(你是否100%肯定在测试时,你总是输入foreach声明?)

澄清$ GLOBALS的行为:

<?php

$GLOBALS['foo'] = 'bar';

var_dump($foo); // outputs 'bar'

if (true) {
    $GLOBALS['foo'] = 'bar2';
}

var_dump($foo); // outputs 'bar2'

function test() {
    var_dump($foo); // notice undefined variable - outputs NULL
    var_dump($GLOBALS['foo']); // outputs 'bar2'
    global $foo;
    var_dump($foo); // outputs 'bar2';
}

test();