token_get_all,返回php源代码,如何?

token_get_all,返回php源代码,如何?,php,Php,我想分析一个源代码(使用token\u get\u all())进行一些修改(例如,将所有private转换为public,去掉final,等等),并保存源代码,但保留相同的格式、制表符等。有没有办法,要做到这一点?否。在进行词法分析时,大部分的格式设置*都会弹出窗口。它与逻辑结构无关,不被保存。您可以根据自己喜欢的格式规则将这些标记重新格式化为新的源代码,但不能以这种方式保留原始源代码格式 *这里有一个T_WHITESPACE标记,它被解析并返回,但是看起来并不是所有的空格在任何情况下都会变成

我想分析一个源代码(使用
token\u get\u all()
)进行一些修改(例如,将所有
private
转换为
public
,去掉
final
,等等),并保存源代码,但保留相同的格式、制表符等。有没有办法,要做到这一点?

否。在进行词法分析时,大部分的格式设置*都会弹出窗口。它与逻辑结构无关,不被保存。您可以根据自己喜欢的格式规则将这些标记重新格式化为新的源代码,但不能以这种方式保留原始源代码格式

*这里有一个
T_WHITESPACE
标记,它被解析并返回,但是看起来并不是所有的空格在任何情况下都会变成标记,所以您可能会丢失至少一些

如果您想这样做,您必须编写自己的标记器/解析器,它还可以记住格式,或者您需要以某种方式将您的更改反向工程到源代码中,并直接修改原始文件(这听起来很疯狂,依我看)。

我编写了以下代码:

private static function convertSourceCodeToTestable ($sourceCodePath)
{
    $newCode = '';
    foreach (token_get_all(file_get_contents($sourceCodePath)) as $item)
    {
        if (is_array($item))
        {
            switch ($item[0])
            {
                case T_FINAL :
                case T_STATIC :
                    $item[1] = '';
                    break;
                case T_PRIVATE :
                case T_PROTECTED :
                    $item[1] = 'public';
                    break;
            }
            $item = $item[1];
        }
        $newCode.= $item;
    }
    return $newCode;
}

这看起来符合我的要求,不会弄乱代码

您可以使用标记中的值生成新文件。不需要格式化。只需将它们缝合成一个字符串并保存到文件中。请确保使用is_string()来识别标记是数组还是字符串。

您的问题是?我得到一个数组。如何将其转换回源代码?