【问题标题】:Multi-line strings in PHPPHP中的多行字符串
【发布时间】:2012-04-02 09:43:07
【问题描述】:

考虑:

$xml = "l";
$xml = "vv";

echo $xml;

这将回显 vv。为什么以及如何为SimpleXML 等内容创建多行字符串?

【问题讨论】:

  • 你想让它在下一行回显“l”和“vv”吗?
  • 查找concatenation。当你把字符串放在一起时,这就是所谓的。
  • @haywire 成为 Google 上第一个有用的结果。

标签: php string


【解决方案1】:

嗯,

$xml = "l
vv";

工作。

您还可以使用以下内容:

$xml = "l\nvv";

$xml = <<<XML
l
vv
XML;

根据评论编辑:

您可以使用.= 运算符连接字符串。

$str = "Hello";
$str .= " World";
echo $str; //Will echo out "Hello World";

【讨论】:

  • 你忘了我之间是否有循环或 MySQL while 循环。谢谢
  • @TheBlackBenzKid:嗯……什么?
  • 示例。 while($rc=mysql_fetch_array($adviews)) { $xml.=""; } $xml.="";
  • @Pacerier 您不需要在 heredoc 中转义引号。
  • @Pacerier 你问我们为什么需要用heredoc 来解决引号问题。这就是为什么。两者都是多行字符串的选项。
【解决方案2】:

PHP 有 Heredoc 和 Nowdoc 字符串,它们是 PHP 中处理多行字符串的最佳方式。

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
$var is replaced automatically.
EOD;

Nowdoc 类似于 Heredoc,但它不会替换变量。

$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
$var is NOT replaced in a nowdoc.
EOD;

您不必使用“EOD”作为您的开始/结束标识符;它可以是你想要的任何字符串。

注意缩进。在 PHP 7.3 之前,结束标识符 EOD 绝对不能缩进,否则 PHP 不会承认它。在 PHP 7.3 及更高版本中,EOD 可以使用空格或制表符缩进,在这种情况下,heredoc/nowdoc 字符串中的所有行都会取消缩进。

【讨论】:

  • 赞成,因为我总是忘记缩进。
  • 哎呀!是的缩进!!
  • PHP 现在允许缩进结束标记,前提是您的 heredoc 内容以相同的方式缩进。结束标记之前的空白量也将从每个heredoc行的开头删除。
  • @Derkades 感谢您的提示!我已经更新了我的答案。
  • 注意: 自 2021 年 11 月起,尽管 PHP 7.3 允许 EOD 缩进,但许多文本/代码编辑器将无法将其识别为有效,而是显示语法警告或损坏代码高亮。相关 Notepad++ 问题:github.com/notepad-plus-plus/notepad-plus-plus/issues/5264
【解决方案3】:

不确定它在性能方面的表现如何,但对于那些并不重要的地方,我喜欢这种格式,因为我可以确定它使用的是 \r\n (CRLF) 而不是我的 PHP 文件的任何格式正好保存在里面。

$text="line1\r\n" .
      "line2\r\n" .
      "line3\r\n";

它还可以让我随意缩进。

【讨论】:

    【解决方案4】:
    $xml="l" . PHP_EOL;
    $xml.="vv";
    echo $xml;
    

    会回声:

    l
    vv
    

    PHP_EOL 上的文档。

    【讨论】:

    • 有没有办法标记答案?我一直认为你只能在问题上这样做。 @TheBlackBenzKid
    • @TheBlackBenzKid "faved" ;)
    【解决方案5】:

    另一种解决方案是使用output buffering,您可以收集正在输出/回显的所有内容并将其存储在变量中。

    <?php
    ob_start(); 
    
    ?>line1
    line2
    line3<?php 
    
    $xml = ob_get_clean();
    

    请注意,在这种情况下,就性能和代码清洁度而言,输出缓冲可能不是最佳解决方案,但值得将其留在这里以供参考。

    【讨论】:

      【解决方案6】:

      也许试试“.=”而不是“=”?

      $xml="l";
      $xml.="vv";
      

      会给你“lvv”;

      【讨论】:

      • 他说他使用的是女巫操作系统吗?答案完全是问题;)
      • 但是,这不会产生所要求的 multi-line 字符串。
      【解决方案7】:

      PHP 有两个内置方法HEREDOC 和NOWDOC 来处理多行字符串。 HEREDOC 也有它的语法

      这里是使用HEREDOC的多行PHP字符串示例,

      <?php
      echo <<<EOT
      My name is BB. I am printing some Text.
      Now, I am printing SECOND LINE.
      This should print a capital 'A': \x41
      EOT;
      ?>
      

      注意如果您想使用本地服务器检查上述代码的正确输出,您必须在 CMD 或 XAMPP Shell 上运行完整的代码。

      【讨论】:

        【解决方案8】:

        将字符串“l”和“vv”单独放在代码中的不同行:

        $xml = "l";
        $xml .= "vv"
        echo $xml;
        

        在这种情况下,您的意思是将.= 字符串附加到该字符串变量的先前版本的末尾。请记住,= 只是一个赋值运算符,因此在您的原始代码中,您正在为变量分配一个新的字符串值。

        将字符串“l”和“vv”单独放在 echo 中的不同行:

        $xml = "l\nvv"
        echo $xml;
        

        在这种情况下,您不需要多个字符串,因为换行符 \n 会为您解决这个问题。

        将字符串“l”和“vv”放在代码中的不同行和回显时:

        $xml = "l";
        $xml .= "\nvv"
        echo $xml;
        

        【讨论】:

          【解决方案9】:
          $xml="l\rn";
          $xml.="vv";
          
          echo $xml;
          

          但你真的应该看看http://us3.php.net/simplexml

          【讨论】:

            猜你喜欢
            • 2012-09-14
            • 2015-09-18
            • 2018-05-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-25
            • 2022-06-10
            相关资源
            最近更新 更多