php-如何从上一个作用域获取所有声明的变量?

// SCOPE 1
printsmth();    

function printsmth(){
  // SCOPE 2 (printsmth)

  // here (inside SCOPE 2) get variables visible in SCOPE 1
  // var_dump($vars);
}

我可以这样做吗?

本质上,我想从调用函数的位置获取所有声明的变量,但要在函数内部(并忽略在函数中声明的变量)

类似于在我的函数中获取get_defined_vars();的结果,但是对于先前的范围:)

好的,甚至更清楚-我只想要我自己的`get_defined_vars`函数的克隆.当我调用函数时,它应该在当前作用域中显示已声明变量的列表.

解决方法:

您可以在范围1中简单地将变量声明为全局变量,然后为变量分配一个值.进一步在函数body(作用域2)中声明与global相同的变量以访问它.上面的例子变成

// SCOPE 1
global $var1, $var2;
$var1 = 1;
$var2 = 2;

printsmth();    

function printsmth(){
   global $var1, $var2;
   echo 'Var1:' . $var1 . 'Var2:' . $var2;//now accessible in scope 2
}

另一个选择是您可以通过引用将变量传递给函数.例如,

// SCOPE 1
$var1 = 1;
$var2 = 2;

printsmth($var1, $var2);

// Note the "&" appended to the parameters. This passes the variables to the 
// function by reference. Any modifications made to the variables will update
// the actual variables in the scope 1

function printsmth(&$var1, &$var2){
   global $var1, $var2;
   echo 'Var1:' . $var1 . 'Var2:' . $var2;//now accessible in scope 2
}
上一篇:php-使函数在当前范围内设置变量


下一篇:PHP将值传递到包含文件中的变量