除了返回数据,有没有办法将变量传递到 PHP 中的不同范围?

Besides returning the data, is there a way to pass up variables to a different scope in PHP?

这是一个相当晦涩的;我知道我到了这里 - 但我正在尝试找到一个 'elegant' 解决方案来向 [有效] 父范围添加一些变量。

示例如下:

File 1:
<?
ImportPost();

// Do something with imported variables.
?>

File 2: 
<?   
function ImportPOST()
{
    foreach( $_POST as $Key => $Value )
        VariableToParentScope($Key, $Value);
}
?>

这样我就可以在我的第一个 ('DoSomething') 方法中得到 'simple' 变量名。我发现自己一遍又一遍地做的一件事是构建这个小的 foreach 来执行这个确切的任务 - 但我没有看到很多其他方法来实现它,除了将它全部放在 class 中 - 这通常是无论如何更可取,但假设这是在一个文件的上下文中,该文件只是一些非 OOP PHP.

我还考虑过阅读 'File 1' 的内容,在其余文件内容之前插入变量,然后 运行 它 - 虽然这可能是最接近'proper' 有实现,我仍在尝试找出是否有更简单或更合适的实现。

有什么想法吗?

即- 编辑堆栈? 0_o

您可以使用 $GLOBALS,这实际上将使您的变量在全局范围内可用:

//assuming $_POST = ['foo'=>'bar']

echo $foo; // Notice: Undefined variable

function ImportPOST()
{
    foreach( $_POST as $Key => $Value )
        $GLOBALS[$key] = $Value;
}

ImportPOST();
echo $foo; // "bar".

但是,正如您自己所说,以这种方式干扰全局范围是不好的做法。

这对我来说似乎是一个潜在的安全风险。我会将所有变量推送到一个数组,然后传递它。或者至多,将此数组添加到全局范围。这样,您可以将所有 post 数据保存在一个地方,而不是与所有其他全局变量处于同一级别。

您可以使用 extract 从数组构建一些变量 - 这是一个示例:

function importVars()
{
    return array('foo'=>'xyzzy', 'bar'=>'123');
}


function demo()
{
    extract(importVars());

    echo "foo is $foo\n";
    echo "bar is $bar\n";
}

demo();

我对使用来自 $_POST 的外部数据执行此操作持谨慎态度 - 最好仔细验证您要引入的内容。