如何在不使用eval()的情况下评估PHP表达式

时间:2015-10-30 13:01:34

标签: php arrays variables eval

我希望通过将变量名称传递给函数来显示变量或数组,并显示它而不必使用危险 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;
}

2 个答案:

答案 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() */