public function getUseVariables()
{
if ($this->useVariables !== null) {
return $this->useVariables;
}
$tokens = $this->getTokens();
$use = array();
$state = 'start';
foreach ($tokens as &$token) {
$is_array = is_array($token);
switch ($state) {
case 'start':
if ($is_array && $token[0] === T_USE) {
$state = 'use';
}
break;
case 'use':
if ($is_array) {
if ($token[0] === T_VARIABLE) {
$use[] = substr($token[1], 1);
}
} elseif ($token == ')') {
break 2;
}
break;
}
}
$this->useVariables = empty($use) ? $use : array_intersect_key($this->getStaticVariables(), array_flip($use));
return $this->useVariables;
}
/** * Analyzer a given closure. * * @param Closure $closure * * @return array */ public function analyze(Closure $closure) { $reflection = new ReflectionClosure($closure); $scope = $reflection->getClosureScopeClass(); $data = ['reflection' => $reflection, 'code' => $reflection->getCode(), 'hasThis' => $reflection->isBindingRequired(), 'context' => $reflection->getUseVariables(), 'hasRefs' => false, 'binding' => $reflection->getClosureThis(), 'scope' => $scope ? $scope->getName() : null, 'isStatic' => $reflection->isStatic()]; return $data; }