web-dev-qa-db-fra.com

Chaînes multilignes dans PHP

Considérer:

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

echo $xml;

Cela fera écho vv . Pourquoi et comment puis-je faire des chaînes multilignes pour des choses comme SimpleXML , etc.?

108
TheBlackBenzKid

Bien,

$xml = "l
vv";

Travaux.

Vous pouvez également utiliser les éléments suivants:

$xml = "l\nvv";

ou

$xml = <<<XML
l
vv
XML;

Modifier basé sur le commentaire:

Vous pouvez concaténer des chaînes à l'aide de l'opérateur .=.

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

PHP contient des chaînes Heredoc et Nowdoc, qui constituent le meilleur moyen de gérer des chaînes multilignes en 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 est comme un Heredoc, mais il ne remplace pas les variables.

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

Attention, le jeton de fin EOD ne doit pas être indenté du tout, sinon PHP ne l'acquittera pas. , vous n’avez pas à utiliser "EOD"; ça peut être n'importe quelle ficelle que vous voulez.

105
Dan Fabulich
$xml="l" . PHP_EOL;
$xml.="vv";
echo $xml;

Fera écho:

l
vv

Documentation sur PHP_EOL .

8
Ryan

Je ne sais pas comment cela se compare avec les performances, mais pour les endroits où cela n'a pas d'importance, j'aime ce format, car je peux être sûr qu'il utilise\r (CRLF) et pas le format que mon PHP le fichier arrive à être enregistré dans.

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

Cela me permet également d'indenter comme je le souhaite.

5
eselk

Peut-être essayer ". =" Indead of "="?

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

vous donnera "lvv";

2

Une autre solution consiste à utiliser tampon de sortie , vous pouvez collecter tout ce qui est en sortie/en écho et le stocker dans une variable.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Veuillez noter que la mise en mémoire tampon de sortie n'est peut-être pas la meilleure solution en termes de performances et de propreté du code pour ce cas précis, mais vaut la peine de la laisser ici pour référence.

1
Xavi Esteve
$xml="l\rn";
$xml.="vv";

echo $xml;

Mais vous devriez vraiment regarder dans http://us3.php.net/simplexml

0
nathanjosiah

Pour placer les chaînes "l" et "vv" sur des lignes séparées dans le code seul:

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

Dans ce cas, vous dites d'ajouter .= la chaîne à la fin de la version précédente de cette variable de chaîne. N'oubliez pas que = n'est qu'un opérateur d'affectation. Dans votre code d'origine, vous affectez ainsi à la variable une nouvelle valeur de chaîne.

Pour mettre les chaînes "l" et "vv" sur des lignes séparées dans l'écho uniquement:

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

Dans ce cas, vous n'avez pas besoin de plusieurs chaînes, car le nouveau caractère de ligne \n s'en chargera pour vous.

Pour mettre les chaînes "l" et "vv" sur des lignes séparées dans le code et lors de l'écho:

$xml = "l";
$xml .= "\nvv"
echo $xml;
0
Shawn Solomon