关于范围的php问题

时间:2010-06-30 22:41:39

标签: php scope

我一直在想是否有可能这样的事情。

// 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()函数 - 它接受一个数组并在调用它的范围内创建变量。

1 个答案:

答案 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()时要小心,因为它会不加选择地导入它执行的变量。没有它,工作效果最好。