自动从 PHP 代码中删除注释的最佳方法

新手上路,请多包涵

从 PHP 文件中删除注释的最佳方法是什么?

我想做一些类似于 strip-whitespace() 的事情——但它也不应该删除换行符。

例如,

我要这个:

 <?PHP
// something
if ($whatsit) {
    do_something(); # we do something here
    echo '<html>Some embedded HTML</html>';
}
/* another long
comment
*/
some_more_code();
?>

成为:

 <?PHP
if ($whatsit) {
    do_something();
    echo '<html>Some embedded HTML</html>';
}
some_more_code();
?>

(尽管如果空行保留在注释被删除的位置,那就不行了。)

这可能是不可能的,因为需要保留嵌入的 HTML——这就是谷歌上出现的问题的原因。

原文由 benlumley 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 860
2 个回答

我会使用 tokenizer 。这是我的解决方案。它应该适用于 PHP 4 和 5:

 $fileStr = file_get_contents('path/to/file');
$newStr  = '';

$commentTokens = array(T_COMMENT);

if (defined('T_DOC_COMMENT')) {
    $commentTokens[] = T_DOC_COMMENT; // PHP 5
}

if (defined('T_ML_COMMENT')) {
    $commentTokens[] = T_ML_COMMENT;  // PHP 4
}

$tokens = token_get_all($fileStr);

foreach ($tokens as $token) {
    if (is_array($token)) {
        if (in_array($token[0], $commentTokens)) {
            continue;
        }

        $token = $token[1];
    }

    $newStr .= $token;
}

echo $newStr;

原文由 Ionuț G. Stan 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 php -w <sourcefile> 生成一个去除注释和空格的文件,然后使用像 PHP_Beautifier 这样的美化器重新格式化以提高可读性。

原文由 Paul Dixon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏