23 private $classNames =
false;
37 $filename = realpath($filename);
38 if (!file_exists($filename) || !\
is_file($filename)) {
41 'The file "%s" does not exist or is not a file',
46 $this->filename = $filename;
70 private function extract()
72 $allowedOpenBraces = [T_CURLY_OPEN, T_DOLLAR_OPEN_CURLY_BRACES, T_STRING_VARNAME];
76 $triggerClass =
false;
77 $triggerNamespace =
false;
79 $bracedNamespace =
false;
86 }
else if (
$token ==
'}') {
90 if ($triggerNamespace) {
92 if (!is_array(
$token) || ($namespace &&
$token[0] == T_WHITESPACE)) {
93 $triggerNamespace =
false;
100 }
else if ($triggerClass &&
$token[0] == T_STRING) {
101 $triggerClass =
false;
108 $triggerNamespace =
true;
110 $bracedNamespace = $this->isBracedNamespace(
$index);
114 if ($braceLevel == 0 || ($bracedNamespace && $braceLevel == 1)) {
115 $triggerClass =
true;
122 $namespace = trim($namespace);
123 $fqClassName = $namespace . trim(
$class);
124 $classes[] = $fqClassName;
137 private function isBracedNamespace(
$index)
139 $len = count($this->tokens);
141 if (!is_array($this->tokens[
$index])) {
142 if ($this->tokens[
$index] ==
';') {
144 }
else if ($this->tokens[
$index] ==
'{') {
150 if (!in_array($this->tokens[
$index][0], [T_WHITESPACE, T_STRING, T_NS_SEPARATOR])) {
151 throw new InvalidFileException(
'Namespace not defined properly');
154 throw new InvalidFileException(
'Could not find namespace termination');
165 if ($this->classNames ===
false) {
166 $this->classNames = $this->extract();
168 return $this->classNames;
$_option $_optionId $class