首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HEREDOC干扰代码缩进

HEREDOC干扰代码缩进
EN

Stack Overflow用户
提问于 2010-02-21 20:37:56
回答 5查看 10.4K关注 0票数 25

我喜欢HEREDOC语法,例如,对于生成的HTML的边缘情况,不值得放到模板中。

不过,唯一让我恼火的是,heredoc字符串的内容和结束标记都附着在第一列上。这会搞乱嵌套的代码布局:

代码语言:javascript
复制
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();
        ...
        ...
        ...

你明白我的意思吗。

现在,这可能不是使用普通的HEREDOC可以解决的。有人解决过这个问题吗?我的梦想是拥有自动缩进的HEREDOC语法。但我猜,如果不为源文件编写一些预编译器,这是不可能的。

我说的对吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-07-04 11:46:05

谢天谢地,这个特性终于通过RFC:Flexible Heredoc and Nowdoc Syntaxes在php7.3中实现了。

所以现在你的例子可以清晰地写成:

代码语言:javascript
复制
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();
    }
}
票数 21
EN

Stack Overflow用户

发布于 2010-02-21 20:54:43

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

一个“更大的”问题是,当你选择一整块代码时,按"tab“(或IDE中的任何等效代码)来进一步缩进它,因为你在它周围添加了一个条件或任何东西……它打破了heredoc字符串:您必须手动取消缩进:-(

不幸的是,我从来没有见过像你描述的这样的工具...

我想,一种解决方案是将heredoc字符串放在另一个文件中,并包含它-- include之类的内容可以正常缩进;但这也意味着要加载多一个文件,这会使代码不那么清晰。

票数 11
EN

Stack Overflow用户

发布于 2012-06-16 21:36:52

你不能在PHP中输入heredocsnowdocs。这是我的解决方法:

代码语言:javascript
复制
function foo() {
    $a = 123;
    $b = 456;
    $sum = $a + $b;
    $html = "
       <div>
         <h1>sum a, b</h1>
         Number a is $a, number b is $b<br>
         a+b equals <b>$sum<b>
       </div>
    ";
    echo $html;
}

这会将空格添加到生成的html代码中,但是如果您使用mod_pagespeed或类似的apache mods,您的服务器将删除所有不必要的空格。

您可以对多行sql查询使用相同的技术:

代码语言:javascript
复制
function bar($sql, $id) {
    $q= "
       SELECT
         name
       , address
       , phone
       FROM users
       WHERE id = '$id' -- possible mysql inyection
       LIMIT 1
    ";
    $sql->query($q);
}

代码增加了可读性。它对性能没有影响,您可以注释复杂的SQL查询(使用#或--)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2305869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档