| @@ 319-368 (lines=50) @@ | ||
| 316 | ||
| 317 | break; |
|
| 318 | ||
| 319 | case T_NAMESPACE: |
|
| 320 | ||
| 321 | // Определим временное пространство имен |
|
| 322 | $_namespace = ''; |
|
| 323 | ||
| 324 | // Переберем все что иде после комманды подключения файла |
|
| 325 | for ($j = $i+1; $j < sizeof($tokens); $j++) |
|
| 326 | { |
|
| 327 | // Получим идентификатор метки и текстовое представление |
|
| 328 | $id = isset( $tokens[ $j ][0] ) ? $tokens[ $j ][0] : ''; |
|
| 329 | $text = isset( $tokens[ $j ][1] ) ? $tokens[ $j ][1] : ''; |
|
| 330 | ||
| 331 | //trace('"'.$id.'" - "'.$text.'"'); |
|
| 332 | ||
| 333 | // Если это закрывающая скобка - прекратим собирание пути к файлу |
|
| 334 | if( $id == ')' || $id == ';' || $id == '{' ) break; |
|
| 335 | ||
| 336 | // Все пробелы игнорирую |
|
| 337 | if( $id == T_WHITESPACE ) continue; |
|
| 338 | ||
| 339 | // Если у метки есть текстовое представление |
|
| 340 | if( isset( $text ) ) |
|
| 341 | { |
|
| 342 | // Если єто константа |
|
| 343 | if( isset( $consts[ $text ])) $_namespace .= $consts[ $text ]; |
|
| 344 | // Если это путь |
|
| 345 | else $_namespace .= $text; |
|
| 346 | } |
|
| 347 | } |
|
| 348 | ||
| 349 | // Если найденный NS отличается от текущего - установим переход к новому NS |
|
| 350 | if( $namespace !== $_namespace ) |
|
| 351 | { |
|
| 352 | // Сохраним новый как текущий |
|
| 353 | $namespace = strtolower($_namespace); |
|
| 354 | ||
| 355 | //trace(' #'.$i.' -> Изменили NS с '.$namespace.' на '.$_namespace); |
|
| 356 | ||
| 357 | // Если мы еще не создали данный NS |
|
| 358 | if( !isset($code[ $namespace ]) ) $code[ $namespace ] = array(); |
|
| 359 | // Создадим уникальную коллекцию алиасов для NS |
|
| 360 | if( !isset($code[ $namespace ][ 'uses' ] ) ) $code[ $namespace ][ 'uses' ] = array(); |
|
| 361 | // Установим ссылку на коллекцию алиасов |
|
| 362 | $uses = & $code[ $namespace ][ 'uses' ]; |
|
| 363 | } |
|
| 364 | ||
| 365 | // Сместим указатель чтения файла |
|
| 366 | $i = $j; |
|
| 367 | ||
| 368 | break; |
|
| 369 | ||
| 370 | // Выделяем код подключаемых файлов |
|
| 371 | case T_REQUIRE : |
|
| @@ 831-880 (lines=50) @@ | ||
| 828 | ||
| 829 | break; |
|
| 830 | ||
| 831 | case T_NAMESPACE: |
|
| 832 | ||
| 833 | // Определим временное пространство имен |
|
| 834 | $_namespace = ''; |
|
| 835 | ||
| 836 | // Переберем все что иде после комманды подключения файла |
|
| 837 | for ($j = $i + 1; $j < sizeof($tokens); $j++) { |
|
| 838 | // Получим идентификатор метки и текстовое представление |
|
| 839 | $id = isset($tokens[$j][0]) ? $tokens[$j][0] : ''; |
|
| 840 | $text = isset($tokens[$j][1]) ? $tokens[$j][1] : ''; |
|
| 841 | ||
| 842 | //trace('"'.$id.'" - "'.$text.'"'); |
|
| 843 | ||
| 844 | // Если это закрывающая скобка - прекратим собирание пути к файлу |
|
| 845 | if ($id == ')' || $id == ';' || $id == '{') break; |
|
| 846 | ||
| 847 | // Все пробелы игнорирую |
|
| 848 | if ($id == T_WHITESPACE) continue; |
|
| 849 | ||
| 850 | // Если у метки есть текстовое представление |
|
| 851 | if (isset($text)) { |
|
| 852 | // Если єто константа |
|
| 853 | if (isset($consts[$text])) $_namespace .= $consts[$text]; |
|
| 854 | // Если это путь |
|
| 855 | else $_namespace .= $text; |
|
| 856 | } |
|
| 857 | } |
|
| 858 | ||
| 859 | // Если найденный NS отличается от текущего - установим переход к новому NS |
|
| 860 | if ($namespace !== $_namespace) { |
|
| 861 | // Сохраним новый как текущий |
|
| 862 | $namespace = strtolower($_namespace); |
|
| 863 | ||
| 864 | //trace(' #'.$i.' -> Изменили NS с '.$namespace.' на '.$_namespace); |
|
| 865 | ||
| 866 | // Если мы еще не создали данный NS |
|
| 867 | if (!isset($code[$namespace])) $code[$namespace] = array(); |
|
| 868 | // Создадим уникальную коллекцию алиасов для NS |
|
| 869 | if (!isset($code[$namespace]['uses'])) $code[$namespace]['uses'] = array(); |
|
| 870 | // Установим ссылку на коллекцию алиасов |
|
| 871 | $uses = &$code[$namespace]['uses']; |
|
| 872 | } |
|
| 873 | ||
| 874 | // Сместим указатель чтения файла |
|
| 875 | $i = $j; |
|
| 876 | ||
| 877 | break; |
|
| 878 | ||
| 879 | // Выделяем код подключаемых файлов |
|
| 880 | case T_REQUIRE : |
|
| 881 | case T_REQUIRE_ONCE : |
|
| 882 | //case T_INCLUDE : |
|
| 883 | case T_INCLUDE_ONCE: { |
|