Tokenizer token_get_all
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
token_get_all — 주어진 소스를 PHP 토큰으로 분할
설명
token_get_all(string $code
, int $flags
= 0): array
token_get_all()은 Zend 엔진의 어휘 스캐너를 사용하여 주어진 code
문자열을 PHP 언어 토큰으로 구문 분석합니다.
파서 토큰 목록은 파서 토큰 목록을 참조하거나 token_name()을 사용하여 토큰 값을 문자열 표현으로 변환합니다.
매개변수
code
- 구문 분석할 PHP 소스입니다.
flags
- 유효한 플래그:
-
TOKEN_PARSE
- 특정 상황에서 예약어를 사용하는 능력을 인식합니다.
-
반환 값
토큰 식별자의 배열입니다. 각 개별 토큰 식별자는 단일 문자(예: ;, ., >, ! 등...)이거나 요소 0의 토큰 인덱스, 요소 1의 원래 토큰 문자열 내용 및 요소 2의 줄 번호.
Examples
예제 #1 token_get_all() 예제
<?php
$tokens = token_get_all('<?php echo; ?>');
foreach ($tokens as $token) {
if (is_array($token)) {
echo "Line {$token[2]}: ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;
}
}
?>
위의 예는 다음과 유사한 결과를 출력합니다.
Line 1: T_OPEN_TAG ('<?php ') Line 1: T_ECHO ('echo') Line 1: T_WHITESPACE (' ') Line 1: T_CLOSE_TAG ('?>')
예제 #2 token_get_all() 잘못된 사용 예
<?php
$tokens = token_get_all('/* comment */');
foreach ($tokens as $token) {
if (is_array($token)) {
echo "Line {$token[2]}: ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;
}
}
?>
위의 예는 다음과 유사한 결과를 출력합니다.
Line 1: T_INLINE_HTML ('/* comment */')
이전 예에서 문자열이 예상되는 T_COMMENT
가 아닌 T_INLINE_HTML
로 구문 분석된다는 점에 유의하십시오. 제공된 코드에 열린 태그가 사용되지 않았기 때문입니다. 이것은 일반 파일의 PHP 태그 외부에 주석을 넣는 것과 같습니다.
예제 #3 예약어를 사용하는 클래스의 token_get_all() 예제
<?php
$source = <<<'code'
<?php
class A
{
const PUBLIC = 1;
}
code;
$tokens = token_get_all($source, TOKEN_PARSE);
foreach ($tokens as $token) {
if (is_array($token)) {
echo token_name($token[0]) , PHP_EOL;
}
}
?>
위의 예는 다음과 유사한 결과를 출력합니다.
T_OPEN_TAG T_WHITESPACE T_CLASS T_WHITESPACE T_STRING T_CONST T_WHITESPACE T_STRING T_LNUMBER
TOKEN_PARSE
플래그가 없으면 끝에서 두 번째 토큰(T_STRING
)은 T_PUBLIC
이 됩니다.
기타
- PhpToken::tokenize() - 주어진 소스를 PhpToken 개체로 표시되는 PHP 토큰으로 분할합니다.
- token_name() - 주어진 PHP 토큰의 기호 이름을 가져옵니다.