5

一个重要的注意事项$GLOBALS肮脏和邪恶。不要使用它们。曾经。永远不会。
请关注它不起作用的事实,而不是首先为什么要这样做,这纯粹是关于技术练习的理论问题。

这是一个比较奇怪的。我正在尝试使用名为$GLOBALS.

从全局范围

让我们看看var_dump()在全局范围内 ing this 会得到什么。

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

结果是一个全局变量数组,您可以在此处查看。伟大的!所以,让我们在一个函数中试试这个。

从函数范围

首先,让我们确保我们实际上可以$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();

为了简单起见

您也可以在没有奇怪混淆的情况下尝试这个(不要问)。

function globalAllTheThings()
{
    $g = 'GLOBALS';
    var_dump($$g);
}

globalAllTheThings();

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

所有的东西,SRSLY

4

1 回答 1

4

因为手册是这样说的:

警告

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

http://php.net/manual/en/language.variables.variable.php

简直是“特别”。PHP 是“特殊的”。超全局变量从一开始就不遵循与常规变量相同的规则。有人忘记或决定不让它们与函数中的变量兼容。时期。

于 2013-08-13T09:55:10.913 回答