HEREDOC干扰代码缩进

Pek*_*ica 16 php heredoc

我喜欢HEREDOC语法,例如,生成的HTML的边缘情况,不值得放入模板.

但是,唯一令我烦恼的是,内容和heredoc字符串的结束标记符合第一列.这搞砸了嵌套的代码布局:

class myclass 
 { 

    function __construct()
      { 
       $a = some_code();
       $b = some_more_code();
       $x = <<<EOT

line1
line2
line3
line4

EOT;    

        $c = even_more_code();
        $b = still_more_code();
        ...
        ...
        ...
Run Code Online (Sandbox Code Playgroud)

你明白我的意思了.

现在使用正常的HEREDOC可能无法解决这个问题.有没有人解决这个问题?我的梦想是使用HEREDOC语法进行自动缩进.但我想如果不为源文件编写一些预编译器,这是不可能的.

我对么?

Pas*_*TIN 11

这也是我经常遇到的一个问题:当我使用heredoc时代码没有很好地缩进,我真的很喜欢heredoc :-(

一个"更大"的问题是,当您选择整个代码块时,按"tab" (或IDE中的任何等效代码)更多地缩进它,因为您添加了条件或其他任何东西......并且它打破了heredoc字符串:你必须用手去缩进它们:-(

不幸的是,我从来没有见过像你所描述的任何工具......


我想,一个解决方案是将heredoc字符串放在另一个文件中,然后包含它 - 包含就像可以正常缩进; 但它也意味着要加载一个文件,这会使代码不那么清晰.

  • 使用某种"预编译器"也意味着你编写的代码*(在你的IDE /编辑器中)*不是被执行的代码 - 这将成为混淆的源头,无论何时. .. (6认同)

dre*_*mac 6

仅供参考,这并不能解决您的问题,但Ruby编程语言支持缩进的heredoc.

您可能希望向PHP开发人员发送功能请求,并使用Ruby文档作为示例来证明现有语言可以解决此问题,那么为什么不用PHP呢?


Jef*_*ett 5

谢天谢地,此功能最终通过RFC进入了php 7.3:灵活的Heredoc和Nowdoc语法

因此,现在您的示例可以完全写为:

class myclass
{
    function __construct()
    {
        $a = some_code();
        $b = some_more_code();
        $x = <<<EOT

        line1
        line2
        line3
        line4

        EOT;

        $c = even_more_code();
        $b = still_more_code();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 并在 https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc 的文档中。 (3认同)