我希望通过将变量名称传递给函数来显示变量或数组,并显示它而不必使用危险 eval()
函数。我无法实现它。有可能吗?
以下是代码:
show( '$_SESSION', 'a' ); // it does not work
show( '_SESSION', 'a' ); // it does not work
function show( $showWhat = null, $showType = null ) {
echo '<pre>';
if( strtolower( $showType ) == 'a' ) { // 'a' represents array()'s
print_r( '$' . $showWhat ); // it does not work
print_r( $showWhat ); // it does not work
}
else { // 'v' represents variables
echo $showWhat;
}
echo '</pre>';
exit;
}
答案 0 :(得分:0)
根本不需要使用eval
。
像这样调用函数
show( '_SESSION', 'a' );
这将有效
print_r( $$showWhat );
完整代码:
show( '_SESSION', 'a' );
function show( $showWhat = null, $showType = null ) {
echo '<pre>';
if( strtolower( $showType ) == 'a' ) { // 'a' represents array()'s
print_r( $$showWhat ); // it does work
}
else { // 'v' represents variables
echo $showWhat;
}
echo '</pre>';
exit;
}
<强>更新强>
对于超级全局变量(SESSION, SERVER etc)
,您应该使用global
关键字。
$context = '_SESSION';
global $$context;
if(isset($$context)) {
print_R($$context);
}
答案 1 :(得分:0)
经过大量的试验和测试后,我以这种方式工作:
show( $_SESSION );
/**
* halts processing and displays arrays & variables
*/
function show( $showWhat = null ) {
echo '<pre>';
if( is_array( $showWhat ) ) {
echo 'Array: ';
print_r( $showWhat );
}
else {
echo 'Variable: ';
echo $showWhat;
}
echo '</pre>';
exit;
} /* show() */