2012-11-18 44 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)與所有的標記標記器識別。 – Havelock

回答

2

因爲解析器在HTML上下文中開始(就像PHP本身一樣),所以您傳遞給token_get_all的整個字符串實際上是一個單獨的HTML令牌。您需要在$str開頭添加<?php