gpt4 book ai didi

php - 为 "$GLOBALS"构造的可变变量字符串在全局范围内工作,但不在函数范围内

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:48 26 4
gpt4 key购买 nike

An important note: $GLOBALS are dirty and evil. Don't use them. Ever. Never ever ever.
Please focus on the fact that it doesn't work and not why you would be doing this in the first place, it is purely a theoretical question about a technical exercise.

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

来自全局范围

让我们看看在全局范围内使用 var_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);

结果是一个全局变量数组,可以看到here .伟大的!那么,让我们在函数中尝试一下。

来自函数作用域

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

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

globalAllTheThings();

结果是:有效!!你可以看到这个here .

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

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,我该怎么做才能让它正常工作。你为什么问?当然是出于教育目的,为了科学!

ALL THE THINGS, SRSLY

最佳答案

因为手册是这样说的:

Warning

Please note that variable variables cannot be used with PHP's Superglobal arrays within functions or class methods. The variable $this is also a special variable that cannot be referenced dynamically.

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

简直就是“特别”。 PHP 是“特殊的”。 Superglobals 不按照与常规变量相同的规则开始。有人忘记或决定不让它们与函数中的可变变量兼容。期间。

关于php - 为 "$GLOBALS"构造的可变变量字符串在全局范围内工作,但不在函数范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18205799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com