2013-08-06 6 views
0

token_get_all()으로 PHP 소스 코드를 파싱하려고합니다. 지금까지 모든 기능이 제대로 작동했지만 이제 메소드의 반환 값을 얻는 방법이 필요합니다.토크 나이저로 코드 반환 값을 얻으십시오

return의 위치를 ​​확인하는 것이 문제가되지 않습니다. 나는 단지 return 값 뒤에 오는 코드 조각을 얻는 방법을 모른다.

<?php 
    class Bla { 
     public function Test1() 
     { 
      $t = true; 

      if($t) { 
       return 1; 
      } 

      return 0; 
     } 

     public function Test2() 
     { 
      echo "bbb"; 
      return; // nothing is returned 
     } 

     public function Test3() 
     { 
      echo "ccc"; 
      $someval1 = 1; 
      $someval2 = 2; 

      return ($someval + $otherval)*2; 
     } 
    } 
?> 

내가 식별 할 수 get_token_all()를 사용 해요 return이 수행됩니다 : 코드의이 작품에 대한 예를 들어

$newStr = ''; 
$returnToken = T_RETURN; 
$tokens = token_get_all($source); 
foreach ($tokens as $key => $token) 
{  
    if (is_array($token)) 
    { 
     if (($token[0] == $returnToken)) 
     { 
      // found return, now get what is returned? 
     } 
     else 
     { 
      $token = $token[1]; 
     } 
    } 

    $newStr .= $token; 
} 

내가 어떻게 코드의 조각을 얻는 단서가 없다 실제로 반환됩니다. 그것이 내가 원하는 것입니다.

누구든지 내가 어떻게 할 수 있을지 생각해보십시오.

답변

2

아마도 도움이 될 수 있습니다. 궁극적으로 당신이 무엇을 하려는지 궁금합니다.

$tokens = token_get_all($str); 
$returnCode = ''; 
$returnCodes = array(); 
foreach ($tokens as $token) { 
    // If return statement start collecting code. 
    if (is_array($tokens) && $token['0'] == T_RETURN) { 
     $returnCode .= $token[1]; 
     continue; 
    } 

    // if we started collecting code keep collecting. 
    if (!empty($returnCode)) { 
     // if we get to a semi-colon stop collecting code 
     if ($token === ';') { 
      $returnCodes[] = substr($returnCode, 6); 
      $returnCode = ''; 
     } else {    
      $returnCode .= isset($token[1]) ? $token[1] : $token; 
     } 
    } 
} 
+0

감사합니다. 나는 같은 생각을하고있었습니다. 이것이 최선의 방법이라고 생각합니다. 적어도 제 목적을 위해 잘 작동합니다. – Vivendi

관련 문제