除了返回数据,有没有办法将变量传递到 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 的外部数据执行此操作持谨慎态度 - 最好仔细验证您要引入的内容。
这是一个相当晦涩的;我知道我到了这里 - 但我正在尝试找到一个 '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 的外部数据执行此操作持谨慎态度 - 最好仔细验证您要引入的内容。