好吧,这是一件棘手的事情:)。我真的不知道你为什么需要这样一个函数,但是,它可以通过一点工作来完成。当然,这只是我的简单解决方案,可以改进以满足您的所有需求。
  
  
   首先,使用ReflectionFunction对象可以非常容易地访问静态变量,但不能访问内部变量。静态的可以访问,比如:
  
  function getVars($function)
{
    $reflectionFunction = new ReflectionFunction($function);
    return $reflectionFunction->getStaticVariables();
}
function my1()
{
   static $x = 5;
   $vars = getVars(__FUNCTION__);
   var_dump($vars);
}
my1();
  
   这个
   
    $vars
   
   值如下:
  
  array(1) {
  ["x"]=>
  &int(5)
}
  
   现在,还有一个解决方法来获取其他变量。我将使用一个简单的正则表达式来匹配变量,但要注意它必须得到很大的改进。
  
  function getVars($function=null)
{
    if(!$function) $function = debug_backtrace()[1]['function'];
    $reflectionFunction = new ReflectionFunction($function);
    // Open the function file.
    $file = new SplFileObject($reflectionFunction->getFileName());
    $file->seek($reflectionFunction->getStartLine() + 1);
    // Grab the function body.
    $content = '';
    while ($file->key() < $reflectionFunction->getEndLine() - 1) {
        $content .= $file->current();
        $file->next();
    }
    // Match all the variables defined.
    preg_match_all('/\$([\w]+)\s?=\s?(.*);/', $content, $matches);
    return array_combine($matches[1] ?? [], $matches[2] ?? []);
}
function my1()
{
   static $x = 5;
   $y = $smth_calculated; 
   var_dump( getVars() );
}
my1();
  
   这个
   
    $VARS
   
   值如下:
  
  array(3) {
  'x' =>
  string(1) "5"
  'y' =>
  string(19) "$smth_calculated" 
}