【问题标题】:php variable variables problemphp变量变量问题
【发布时间】:2011-05-30 20:47:10
【问题描述】:
$_POST['asdf'] = 'something';

function test() {
    // NULL -- not what initially expected
    $string = '_POST';
    echo '====';
    var_dump(${$string});
    echo '====';

    // Works as expected
    echo '++++++';
    var_dump(${'_POST'});
    echo '++++++';

    // Works as expected
    global ${$string};
    var_dump(${$string});

}

// Works as expected
$string = '_POST';
var_dump(${$string});

test();

我不明白为什么会出现这种行为.. 谁能解释一下.. 我需要知道为什么会出现这种行为。我实际上没有得到代码..

【问题讨论】:

  • 你期待什么?如果实际行为与您的期望不同,那么您的期望就是错误的。
  • 你觉得奥斯瓦尔德怎么样
  • 像第一个 vardump 内部函数应该正常工作.. 为什么第三个 vardump 内部函数工作正常

标签: php


【解决方案1】:

看here

请注意变量变量 不能与 PHP 的 Superglobal 一起使用 函数或类中的数组 方法。变量 $this 也是一个 不能的特殊变量 动态引用。

【讨论】:

  • 你能解释一下测试函数中的第三个vardump吗
  • @Jaimin:这是因为global ${$string}; 全局声明。如果您注释掉这行代码,您将看到第三个 var_dump 也不起作用
  • 第三个var_dump() 可能会起作用,因为global ${$string}} 可能会创建一个引用全局变量的局部变量。我不确定在使用 global 关键字时技术上确实是这样做的,但这是我的猜测。
  • singh: by global ${$string};我们正在使用超全局变量,PHP 说“请注意,变量变量不能在函数或类方法中与 PHP 的超全局数组一起使用。变量 $this 也是一个不能动态引用的特殊变量。”那怎么可能..
  • @Jaimin:你应该看看@mario 的回答,他很好地解释了它是如何工作的
【解决方案2】:

PHP 没有真正的全局变量。 “超全球”也是用词不当。 $_POST 和 $_GET 永远不会出现在局部变量哈希表中。它们以别名的形式存在,PHP 只能在普通访问中看到这些别名。变量变量访问方法只查看当前本地哈希表。

global $$string;
  //   $$string = & $GLOBALS[$string];

在本地哈希表中创建对超全局变量的引用是一个绝妙的技巧。这就是为什么在该语句之后,您可以使用变量变量来访问“超全局变量”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    相关资源
    最近更新 更多