我一直在想是否有可能这样的事情。
// this creates a variable $test in the scope it was called from
function create_var() {}
class A {
function test()
{
create_var();
// now we have a local to var() method variable $test
echo $test;
}
}
所以,问题是,函数create_var()是否可以在其范围之外创建变量,但不能在全局范围内创建?示例是extract()函数 - 它接受一个数组并在调用它的范围内创建变量。
答案 0 :(得分:3)
不,这是不可能的。只能从函数中访问全局范围。
您可以让create_var()
返回一个关联数组。您可以在函数中extract()
:
function create_var()
{ return array("var1" => "value1", "var2" => "value2"); }
class A {
function test()
{
extract(create_var());
// now we have a local to var() method variable $test
echo $test;
}
}
使用新的closures功能可以在PHP 5.3中更接近您想要做的事情。这需要预先声明变量,所以它并不真正适用。将变量引用传递给create_var()
:create_var(&$variable1, &$variable2, &$variable3....)
警告语:我认为没有任何情况下这是最好的编码习惯。使用extract()
时要小心,因为它会不加选择地导入它执行的变量。没有它,工作效果最好。