有没有一种自动的方法来修复PHP中的一行if


Is there an automated way of fixing one line ifs in PHP?

我不知道是不是只有我,但我对任何类c语言中的一行if过敏,我总是喜欢在if后面看到花括号,所以我不喜欢

if($a==1)
  $b = 2;

if($a==1) $b = 2;

我想看看

if($a==1){
   $b = 2; 
}

我想我可以支持我的偏好,认为第一个更容易出错,可读性较差。

我现在的问题是,我正在编写一个包含这些单行if的代码,我想知道是否有某种实用程序可以帮助我纠正这些if,某种php代码美化程序可以做到这一点。

我也在考虑开发一些可以与linux的sed命令一起使用的正则表达式来实现这一点,但我不确定这是否可能,因为正则表达式应该匹配一行if,并用curley括号将它们包装起来,所以逻辑是找到一个if和条件语句,然后根据条件查找{,如果找不到,则换行前换行下一行或下一组字符,然后用{和}换行

你觉得怎么样?

您最好的选择可能是使用内置的PHP令牌化器,并解析生成的令牌流。

有关PHP Tokenizer的更多信息,请参阅此答案:https://stackoverflow.com/a/5642653/1005039

您还可以查看我为解析PHP源文件而编写的脚本,以修复遗留代码中的另一个常见问题,即修复未引用的数组索引:https://github.com/GustavBertram/php-array-index-fixer/blob/master/aif.php

脚本使用状态机而不是通用解析器,但在您的情况下,它可能已经足够好了。