Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为";构造的变量字符串$“全球”;在全局范围内工作,但不在功能范围内_Php_Global Variables - Fatal编程技术网

Php 为";构造的变量字符串$“全球”;在全局范围内工作,但不在功能范围内

Php 为";构造的变量字符串$“全球”;在全局范围内工作,但不在功能范围内,php,global-variables,Php,Global Variables,一个重要提示:$GLOBALS既肮脏又邪恶。不要使用它们。曾经从未有过。 请关注它不起作用的事实,而不是你为什么要这样做,这纯粹是一个关于技术练习的理论问题 这是一个相当奇怪的问题。我正在尝试使用名为$GLOBALS的字符串构造变量 来自全球范围 让我们看看当var\u dump()在全局范围内执行此操作时会得到什么 $g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(8

一个重要提示
$GLOBALS
既肮脏又邪恶。不要使用它们。曾经从未有过。
请关注它不起作用的事实,而不是你为什么要这样做,这纯粹是一个关于技术练习的理论问题

这是一个相当奇怪的问题。我正在尝试使用名为
$GLOBALS
的字符串构造变量

来自全球范围

让我们看看当
var\u dump()
在全局范围内执行此操作时会得到什么

$g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(83));
var_dump($$g);
结果是一个全局变量数组,您可以看到。伟大的让我们在函数中试试这个

function globalAllTheThings()
{
    var_dump($GLOBALS);
}

globalAllTheThings();
从功能范围

首先,让我们确保可以在函数中实际运行
$GLOBALS
检查

function globalAllTheThings()
{
    var_dump($GLOBALS);
}

globalAllTheThings();
结果是:它起作用了!!你可以看到这个

现在,让我们在函数的全局范围内尝试第一个测试,看看会发生什么

function globalAllTheThings()
{
    $g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(83));
    var_dump($$g);
}

globalAllTheThings();
为了简单起见

你也可以不用奇怪的困惑(不要问)

它返回
NULL
。那是怎么回事??为什么它返回
NULL
,我该怎么做才能使它正常工作。为什么,你问?当然是为了教育的目的,科学的目的


因为手册上说:

警告

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


它只是“特别的”。PHP是“特殊的”。超全局变量的规则与常规变量不同。有人忘记或决定不让它们与函数中的变量兼容。句号。

为了简单起见,你不能用
$g='GLOBALS'
来代替你那古怪的
sprintf chr
?这不应该影响结果。如果是这样的话,那就值得再问一个问题了。因为
${'string'}
在给定的范围内查找变量。哇,这个发现真不错。我在这方面做了“RTFM”,但肯定错过了。多么失败的一次……在政治上使用“special”是非常不正确的。@Dave PHP是编程语言中的一种语言,它主要是由它的异常定义的,而不是由它的规则定义的……;)那么为什么代码
$f=''u POST';变量转储($$f)工作正常吗_POST也是一个超全局的。我在
eval()
(这是我的沙盒)中尝试过这一点:
$f='GLOBALS'$h="u POST";变量转储($$f,$$h)-这就产生了:
NULL数组(2){[“code”]=>string(49)”$f='GLOBALS';$h=''u POST';var_dump($$f,$$h);“[“eval”]=>string(4)“test”}
-也就是说,它似乎是这样。在eval中,还有第三种行为(GLOBALS仍然不起作用)