Chaînes multilignes en PHP

141

Considérer:

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

echo $xml;

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

TheBlackBenzKid
la source
1
Voulez-vous qu'il fasse écho "l" suivi de "vv" sur la ligne suivante?
Mike Samuel
3
Lève les yeux concatenation. C'est ce qu'on appelle quand on assemble des chaînes.
Crashspeeder
14
@haywire En étant le premier résultat utile sur Google.
Cees Timmerman

Réponses:

262

Bien,

$xml = "l
vv";

Travaux.

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

$xml = "l\nvv";

ou

$xml = <<<XML
l
vv
XML;

Modifier en fonction du 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";
Fantôme de Madara
la source
5
Vous avez oublié si j'ai des boucles ou MySQL tandis que des boucles entre. Merci
TheBlackBenzKid
89
@TheBlackBenzKid: Ummm ... Quoi?
Madara's Ghost
1
Exemple. while ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<set name = '". $ rc ["date"]. "' value = '1' hoverText = '". $ rc ["date" ]. "'/>"; } $ xml. = "</graph>";
TheBlackBenzKid
3
@Pacerier Vous n'avez pas besoin d'échapper aux citations à l'intérieur d'un heredoc.
Madara's Ghost
7
@Pacerier Vous avez demandé pourquoi nous devons nous préoccuper d'heredoc sur les citations. C'est pourquoi. Les deux sont des options pour les chaînes multilignes.
Madara's Ghost
139

PHP a des chaînes Heredoc et Nowdoc, qui sont le meilleur moyen de gérer les 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;

Un 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 EODne doit pas du tout être indenté, sinon PHP ne le reconnaîtra pas. De plus, vous n'êtes pas obligé d'utiliser " EOD"; il peut s'agir de n'importe quelle chaîne de votre choix.

Dan Fabulich
la source
8
J'ai voté pour parce que j'oublie toujours l'indentation.
Matuszek
8
$xml="l" . PHP_EOL;
$xml.="vv";
echo $xml;

Fera écho:

l
vv

Documentation sur PHP_EOL .

Ryan
la source
Favoris. @Pacerier
TheBlackBenzKid
Existe-t-il un moyen de marquer les réponses? J'ai toujours pensé que vous ne pouviez faire cela que sur des questions. @TheBlackBenzKid
Pacerier
Je voulais dire que je lui ai donné un plus +1 en le remplaçant.
TheBlackBenzKid
@TheBlackBenzKid "faved";)
Andrés Morales
8

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

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

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

Eselk
la source
5

Une autre solution consiste à utiliser la mise en mémoire tampon de sortie , vous pouvez collecter tout ce qui est sorti / é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 cela vaut la peine de la laisser ici pour référence.

Xavi Esteve
la source
2

Essayez peut-être ". =" Au lieu de "="?

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

vous donnera "lvv";

Norbert Orzechowicz
la source
1
A-t-il dit que le système d'exploitation utilisait-il? Aanswer est complètement comme question;)
Norbert Orzechowicz
Cependant, cela n'entraîne pas une chaîne multiligne comme demandé en question.
ToolmakerSteve le
0

Pour mettre 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, donc dans votre code d'origine, vous attribuez à 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 seul:

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

Vous n'avez pas besoin de plusieurs chaînes dans cette instance, comme caractère de nouvelle 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;
Shawn Solomon
la source