繁体   English   中英

如何从前一个范围获取所有声明的变量?

[英]How do you get all declared variables from the previous scope?

// 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(); ,在我的功能,但对于以前的范围:)


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

您可以在范围1中简单地将变量声明为全局变量,并为变量赋值。 进一步在函数体(范围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
}

我知道你在问什么。 这是你(或我)想要的方式所不可能的。

你必须以与上述方式类似的方式传递它们。 我是这样做的:

function print_smith($globals) {
    extract($globals);
    echo $variable;
}

$variable = 'Smith';
$vars = get_defined_vars();
printsmith($vars); // Smith

这种方式稍微冷一点(没有传递参数):

function print_smith() {
    global $vars;
    if(NULL !== $vars) {
        extract($vars);
    }
    echo $variable;
}

$variable = 'Smith';
$vars = get_defined_vars();
printsmith(); // Smith

它如此简单

$valriable_Outside_scope;
// SCOPE 1
printsmth();    

function printsmth(){
  global $valriable_Outside_scope;
  // SCOPE 2 (printsmth)

  // here (inside SCOPE 2) get variables visible in SCOPE 1
}

global varibale_name; //将允许您访问外部范围项

使用global关键字:

$variable = true;

function printsmth(){
  global $variable;

  if ( $variable ) {
    echo 'it works';
  }
}

printsmth();

这个:

       $var = "hello";
       printsmth();

       function printsmth(){
         global $var;
         echo $var;
       }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM