我正在尝试使用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;
}
我不知道如何获取实际返回的代码片段。这就是我想要的。
任何人都知道我怎么能这样做?
答案 0 :(得分: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;
}
}
}