【问题标题】:Can't access global array outside of an if statement?无法访问 if 语句之外的全局数组?
【发布时间】:2015-08-03 15:39:44
【问题描述】:

我在 php.ini 中设置全局数组时遇到了一些问题。我从 $_POST 获得的数据直接来自我的数据库。我通过外部页面将其发送到 JSON 解码/等。 (那部分有效,所以我没有粘贴代码)。如果设置了数据,我只想这样做,然后我想在我的其余代码中获取该数组并用它做其他事情。我遇到的问题是 if 语句之外的数组为空。我似乎无法弄清楚为什么?如果我要在 if 语句中回显 var_dump,则值在 GLOBALS['Array']

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

【问题讨论】:

  • 这段代码中没有设置$Array..
  • 最后一行应该是echo var_dump($GLOBALS['Array']);
  • 对不起,您指的是最后一条语句 echo var_Dump($Array); 吗?我认为当您在函数外部引用全局时,您只需将其称为变量的名称。
  • 应该是var_dump($GLOBALS['Array']);,而不是你现在拥有的。
  • 谢谢,它成功了。但公平地说,我引用的网站具有误导性......w3schools.com/php/php_superglobals.asp

标签: php arrays scope global


【解决方案1】:

您的问题在其他地方。 $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();

【讨论】:

  • 你说得对,我发现了错误,无法相信我是多么愚蠢。它不起作用的原因是因为包含我的 PHP 代码的页面是通过 javascript/AJAX 函数调用访问的。由于某种原因,我忘记了 AJAX 调用无法访问 PHP 页面的其余部分。它只能访问随调用发送的参数。这就是为什么当我访问全局变量时它会一直显示 null 的原因。 $_POST['data'] 不是通过 AJAX 调用发送的,所以它从一开始就是 NULL。
猜你喜欢
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 2021-05-04
相关资源
最近更新 更多