Imprimer la nouvelle ligne en PHP entre guillemets simples

125

J'essaye d'utiliser les guillemets simples autant que possible et j'ai remarqué que je ne peux pas utiliser \ n entre guillemets simples. Je sais que je peux simplement entrer une nouvelle ligne littéralement en appuyant sur retour, mais cela fausse l'indentation de mon code.

Y a-t-il un caractère ASCII ou quelque chose que je peux taper qui produira une nouvelle ligne lorsque j'utilise des guillemets simples?

Mat
la source
Si quelqu'un est intéressé par une solution qui fonctionne à la fois pour le navigateur et le terminal (cli, ligne de commande): stackoverflow.com/a/9665253/1923625
Omar Tariq
Il n'y a honnêtement aucune raison de rechercher à tout prix des citations simples . Les deux syntaxes servent à une raison. Si vous voulez des variables interpolées ou des séquences échappées, vous êtes censé utiliser intentionnellement des guillemets doubles . Une bonne règle à suivre est la suivante: utilisez toujours des guillemets simples, sauf si vous voulez les guillemets doubles pour une bonne raison . C'est de la cohérence mes amis.
Victor Schröder

Réponses:

142

Non, car les guillemets simples empêchent même le remplacement du code hexadécimal.

echo 'Hello, world!' . "\xA";
Ignacio Vazquez-Abrams
la source
1
Ah ok ... j'espérais ne pas avoir à recourir à ça ... Merci!
Matt
Oui monsieur. Il y a répondu en moins de 10 min. J'ai dû attendre jusque-là pour accepter, puis j'ai oublié ça haha.
Matt
1
Y a-t-il une alternative à cela? Je dois l'utiliser dans un preg_replace dans lequel je ne peux pas utiliser de guillemets doubles.
Alex Hadley
1
Ce n'est pas le bon raisonnement. Ce n'est pas parce qu'en PHP, vous ne pouvez pas exprimer un caractère de nouvelle ligne entre guillemets simples. Et c'est tout. La lecture du manuel aurait pu aider :)
hakre
3
@hakre Certes, la lecture du manuel aurait pu aider, mais heureusement, StackOverflow est l'endroit idéal pour rechercher exactement ces réponses;)
Frederik Krautwald
108
echo 'hollow world' . PHP_EOL;

Utilisez la constante PHP_EOL, elle est également indépendante du système d'exploitation.

Coupes
la source
4
Vous ne devriez généralement pas utiliser PHP_EOL car cela rend votre code dépendant du système sur lequel il s'exécute. Par exemple, votre serveur Linux communique avec un autre serveur, puis votre serveur est remplacé par Windows ... Pas bon.
Andreas
25

Si vous echoutilisez un navigateur, vous pouvez utiliser <br/>avec votre relevé:

echo 'Will print a newline<br/>';
echo 'But this wont!';
Anthony Forloney
la source
3
Malheureusement, c'est plus à des fins de terminal ... merci pour votre réponse.
Matt
Essayez ceci dans un e-mail texte seulement;)
Kai Noack
22

Pour info, il est possible d'obtenir des nouvelles lignes dans des chaînes sans guillemets doubles:

printf('Please%1$sgive%1$sme%1$snewlines%1$s', PHP_EOL);

Ce qui peut être utile si votre peur irrationnelle des guillemets doubles ne connaît pas de limites. Bien que je crains que ce remède soit pire que la maladie.

leepowers
la source
Ce n'est pas une crainte ... vous obtenez simplement de meilleures performances lorsque vous utilisez des guillemets simples, donc j'essaie de les utiliser plus souvent que non ... mais oui, ce n'est pas vraiment une excellente solution pour ce problème, c'est plus de problèmes que de valeur . Merci.
Matt
5
Je ne l'ai pas testé mais je parierais que l'utilisation de guillemets doubles est plus rapide que l'utilisation printfou la caténation de chaînes en général.
Mikko Rantalainen
Ce n'est pas toujours irrationnel, les doubles guillemets peuvent être problématiques, selon ce que vous voulez faire. echo 'For example, I want this to spit out php code.\necho $this->stuff;';
David Baucum
@DavidBaucum, je sais que c'est un vieux fil de discussion, mais juste pour référence pour vous-même et toute autre personne qui trébuche dessus, echo "For example, I want this to spit out php code.\necho \$test;";- comme vous pouvez le voir, vous pouvez échapper aux variables, ce qui résout le problème que vous décrivez avec des guillemets doubles.
Josh Wood le
9

Il y a une différence sur l'utilisation de guillemets simples VS doubles en PHP

par exemple: 1. echo '$var\n'; 2.echo "$var\n";

  • en 1, PHP imprimera littéralement: $var\n
  • dans 2, PHP devra rechercher l'emplacement en mémoire $varet renvoyer la valeur à cet emplacement, également, il devra analyser le \ n comme un caractère de nouvelle ligne et imprimer ce résultat

Nous sommes de l'ordre du millionième de seconde, mais il y a une différence de performance. Je vous recommande d'utiliser des guillemets simples dans la mesure du possible, même en sachant que vous ne pourrez pas percevoir cette augmentation des performances. Mais je suis un développeur paranoïaque en matière de performances.

linuxdev
la source
Je vous félicite d'avoir essayé de rechercher la meilleure façon de faire cela au lieu d'utiliser la solution de guillemets doubles AKA The lazy-developer-solution.
linuxdev
La meilleure façon que je connaisse pour faire ce que vous voulez: echo 'foo', "\ n";
linuxdev
3
Le moyen le plus rapide de le faire estecho $var + "\n";
Hengjie
2
@Hengjie: Vous voulez probablement dire echo $var . "\n";.
Skippy le Grand Gourou
@linuxdev: Je ne vois pas l'intérêt de cette réponse. Puisque la sortie de 1 n'est pas la même que la sortie de 2 de toute façon (même en supposant $var='$var'…), ne comparez-vous pas des pommes avec des oranges?
Skippy le Grand Gourou
8

La seule séquence d'échappement que vous pouvez utiliser entre guillemets simples concerne le guillemet simple lui-même.

$foo = 'That\'s great';

La seule façon d'insérer une nouvelle ligne dans une chaîne créée avec des guillemets simples est d'insérer une nouvelle ligne littérale

$bar = 'That\'s
cheating';
Alan Storm
la source
1
C'est par rapport aux autres réponses la solution la plus simple.
Kai Noack
5

Je me demande pourquoi personne n'a ajouté l'alternative d'utiliser la fonction chr():

echo 'Hello World!' . chr(10);

ou, plus efficace si vous allez le répéter un million de fois:

define('C_NewLine', chr(10));
...
echo 'Hello World!' . C_NewLine;

Cela évite la notation ridicule de la concaténation d'une chaîne entre guillemets simples et doubles.

Nouveaux sites
la source
1
Cela semble être la solution portable la plus jolie et la plus respectueuse des peluches.
daraul le
3

Vous pouvez envisager d'utiliser <<<

par exemple

<<<VARIABLE
this is some
random text
that I'm typing 
here and I will end it with the 
same word I started it with
VARIABLE

Plus d'infos sur: http://php.net/manual/en/language.types.string.php

Btw - Certains environnements de codage ne savent pas comment gérer la syntaxe ci-dessus.

Duniyadnd
la source
1
Ah oui ... mais je déteste toujours le fait que VARIABLE à la fin casse toute indentation dans votre code ... J'ai rencontré tant d'erreurs (stupides) en utilisant la syntaxe HEREDOC
Matt
0

Non, selon la documentation , PHP ne reconnaît aucun symbole spécial entre guillemets simples. Et il n'y a pas de raison unique d'utiliser autant que possible des guillemets simples

Votre bon sens
la source
L'utilisation de guillemets simples augmente légèrement les performances. De plus, il semble être une bonne pratique de définir explicitement quand vous voulez que les variables soient remplacées.
Jackson Miller
4
@Jackson il n'y a pas d' augmentation des performances. N'importe comment. Oubliez ces rumeurs puériles. Et non, ne parlez pas de variables, mais de séquences spéciales. Si vous voulez qu'une séquence, une variable ou une nouvelle ligne soit développée, utilisez des guillemets doubles, à cet effet . Et OP refuse de l'utiliser à cette fin est un non-sens.
Votre bon sens
Il n'y a absolument aucune raison de ne pas utiliser de guillemets doubles lorsque vous souhaitez interpoler une variable à l'intérieur d'une chaîne. Il en va de même avec un échappé /npour les sauts de ligne. C'est plus facile, plus propre, plus lisible et n'a aucune pénalité de performance.
Victor Schröder
0

au cas où vous auriez une variable:

$your_var = 'declare your var';
echo 'i want to show my var here'.$your_var.'<br>';
Braham Youssef
la source
0

Vous pouvez utiliser ceci:

echo 'Hello World' . "\n";
Test Cisco
la source
-1

Cela a bien fonctionné pour moi:

print_r('Hello world'.PHP_EOL);
Mohammad Zaid Pathan
la source