这可能是一个简单的问题,我担心答案可能是“不”,但是......
这是一段简单的代码:
function func1() {
$bt = debug_backtrace();
print "Previous function was " . $bt[1]['function'] . "\n";
}
现在......这可以在没有临时变量的情况下完成吗?在另一种语言中,我可能会说:
function func1() {
print "Previous function was " . (debug_backtrace())[1]['function'] . "\n";
}
唉,在PHP中,这会导致错误:
PHP Parse error: syntax error, unexpected '[' ...
如果无法完成,则无法完成,我将使用临时变量,但我宁愿不这样做。
答案 0 :(得分:6)
不,遗憾的是,在当前版本的PHP中不支持直接解除引用,但显然将在PHP 5.4中提供。
答案 1 :(得分:1)
目前在PHP 5.3中不提供数组解除引用,但它将在PHP 5.4(PHP 5.4.0 RC2 is currently available for you to tinker with)中提供。在此期间,您可以使用end()
,reset()
或帮助函数来获得所需内容。
$a = array('a','b','c');
echo reset($a); // echoes 'a'
echo end($a); // echoes 'c'
echo dereference($a, 1); // echoes 'b'
function dereference($arr, $key) {
if(array_key_exists($key, $arr)) {
return $array[$key];
} else {
trigger_error('Undefined index: '.$key); // This would be the standard
return null;
}
}
请注意end()
和current()
会重置数组的内部指针,所以要小心。
为了您的方便,如果您将链接取消引用,这可能会派上用场:
function chained_dereference($arr, $keys) {
foreach($keys as $key) {
$arr = dereference($arr, $key);
}
return $arr;
}
// chained_dereference(debug_backtrace(), array(1, 'function')) = debug_backtrace()[1]['function']