2012-11-18 6 views
2

PHP 소스 코드에서 중괄호 수를 계산하려고합니다. 따라서 결국 주어진 소스 코드에서 메소드/함수의 끝을 찾을 수 있습니다.token_get_all() 함수가 제대로 작동하지 않습니다.

이 작업에 token_get_all() 기능을 사용하는 것이 좋습니다. 그러나 어떤 이유로 그것은 주어진 소스를 토큰으로 분할하지 않습니다.

<?php 
$str = 'class someClass{ 
    public $var1; 
    private $var2 = null; 

    public function func1 ($someVar) 
    { 
     echo $someVar; 
    } 

    public function func2 () 
    { 
     return false; 
    } 
}'; 

$bla = token_get_all ($str); 

echo '<pre>'; 
print_r ($bla); 
echo '</pre>'; 
?> 

을하지만이 결과 :

나는 그것을 테스트하기 위해 다음 코드를 사용하고 그래서 지금

Array 
(
    [0] => 311 
    [1] => class someClass{ 
    public $var1; 
    private $var2 = null; 

    public function func1 ($someVar) 
    { 
     echo $someVar; 
    } 

    public function func2 () 
    { 
     return false; 
    } 
} 
    [2] => 1 
) 

내가 좀이 붙어 있어요. token_get_all()이 주어진 소스 코드를 토큰 화하지 않는 이유는 무엇입니까?

+0

닫는 중괄호는 함수의 것뿐만 아니라 다른 블록의 끝을 표시하므로 카운트하지 마십시오. 'T_FUNCTION' 토큰을 찾으세요 ;-) 모든 토큰을 가진 다른 토큰들에 관심이 있다면 (http://www.php.net/manual/en/tokens.php) tokenizer는 인식합니다. – Havelock

답변

2

파서는 (PHP 자체와 마찬가지로) HTML 컨텍스트에서 시작하므로 실제로 token_get_all에 전달 된 전체 문자열은 실제로 단일 HTML 토큰입니다. $str 시작 부분에 <?php을 추가해야합니다.

관련 문제