从一个函数调用全局动态变量

时间:2019-02-02 22:54:40

标签: php

有一种方法来调用被设置功能外,例如使其成为一个全局变量的函数内的动态变量。

$a = 'test' 
$b = 'cat' 
$c = 'dog' 

debug_vars(['a', 'b', 'c']); 

function debug_vars( $arr ) { 
  $display = array();
  foreach($arr AS $v) { 
    GLOBAL ${$v}; 
    $display[$v] = $v; 
  } 
  print_r($display);
} 

我希望它显示[[a] =>'test','b'=>'cat','c'=>'dog']的数组

4 个答案:

答案 0 :(得分:2)

您现在重新创建内置的compact功能,它已经做你想要什么:

$a = 'test' ;
$b = 'cat' ;
$c = 'dog' ;

print_r(compact('a','b','c'));

//Array ( [a] => test [b] => cat [c] => dog )

http://php.net/manual/en/function.compact.php

答案 1 :(得分:0)

你快到了

$a = 'test';
$b = 'cat'; 
$c = 'dog' ;

debug_vars(['a', 'b', 'c']); 

function debug_vars( $arr ) { 
  $display = array();
  foreach($arr AS $v) { 
    GLOBAL ${$v};
    $display[$v] = ${$v};
    //             ^---^--------------- use the global ?
  } 
  print_r($display);
}

输出:

  

数组([a] =>测试[b] =>猫[c] =>狗)

尽管这可以按预期工作,但我不建议您使用全局变量。这很容易导致代码无法维护。尝试使用除全局变量之外的其他方法。

答案 2 :(得分:0)

您可以将variable variable$$运算符一起使用。

<?php
$a = 'test';
$b = 'cat'; 
$c = 'dog';
debug_vars(['a', 'b', 'c']); 
function debug_vars( $arr ) { 
    $debug = array();
    foreach($arr AS $v) {
        if ($v != 'debug') {
            GLOBAL $$v; 
            $debug[$v] = $$v;
        }
    } 
    print_r($debug);
} 

答案 3 :(得分:0)

使用$GLOBALS[]

$display[$v] = $GLOBALS[$v];

-> http://php.net/manual/en/reserved.variables.globals.php

编辑:

如果在本地使用var名称,则使用其他答案中提到的global $$v可能会有副作用。