// 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
}