有一种方法来调用被设置功能外,例如使其成为一个全局变量的函数内的动态变量。
$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']的数组
答案 0 :(得分:2)
您现在重新创建内置的compact
功能,它已经做你想要什么:
$a = 'test' ;
$b = 'cat' ;
$c = 'dog' ;
print_r(compact('a','b','c'));
//Array ( [a] => test [b] => cat [c] => dog )
答案 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
可能会有副作用。