Stampa newline in PHP tra virgolette singole


125

Cerco di usare le virgolette singole il più possibile e ho notato che non posso usare \ n tra virgolette singole. So che posso semplicemente inserire una nuova riga letteralmente premendo Invio, ma ciò rovina il rientro del mio codice.

C'è qualche carattere ASCII o qualcosa che posso digitare che produrrà newline quando sto usando virgolette singole?


Se qualcuno è interessato a una soluzione che funziona sia per browser che per terminale (cli, riga di comando): stackoverflow.com/a/9665253/1923625
Omar Tariq

Onestamente non c'è motivo di cercare citazioni singole a tutti i costi . Entrambe le sintassi servono a una ragione. Se vuoi variabili interpolate o sequenze di escape, dovresti usare intenzionalmente virgolette doppie . Una buona regola da seguire è: usa sempre virgolette singole, a meno che tu non voglia le virgolette doppie per una buona ragione . Questa è coerenza amici miei.
Victor Schröder,

Risposte:


142

No, perché le virgolette singole inibiscono persino la sostituzione del codice esadecimale.

echo 'Hello, world!' . "\xA";

1
Ah ok .. Speravo di non dover ricorrere a quello .. Grazie!
Matt,

si signore. Ha risposto in meno di 10 minuti. Ho dovuto aspettare fino ad allora per accettare, poi me ne sono dimenticato ahah.
Matt,

1
C'è qualche alternativa a questo? Devo usarlo in un posto preg in cui non posso usare le doppie virgolette.
Alex Hadley,

1
Questo non è il ragionamento giusto. No perché in PHP non è possibile esprimere un carattere di nuova riga tra virgolette singole. E questo è tutto. La lettura del manuale avrebbe potuto aiutare :)
Hacre

3
@hakre Sicuramente, leggere il manuale avrebbe potuto essere d'aiuto, ma per fortuna StackOverflow è il posto dove cercare esattamente queste risposte;)
Frederik Krautwald,

108
echo 'hollow world' . PHP_EOL;

Usa la costante PHP_EOL, quindi è anche indipendente dal sistema operativo.


4
Di solito non dovresti usare PHP_EOL poiché questo rende il tuo codice dipendente dal sistema su cui è in esecuzione. Ad esempio il tuo server Linux sta comunicando con un altro server e quindi il tuo server viene sostituito da Windows ... Non va bene.
Andreas,

25

Se stai utilizzando echoun browser, puoi utilizzare <br/>con la tua dichiarazione:

echo 'Will print a newline<br/>';
echo 'But this wont!';

3
Purtroppo è più per scopi terminali .. grazie per la tua risposta però.
Matt,

Prova questo in un'e-mail di solo testo;)
Kai Noack,

22

Cordiali saluti, è possibile inserire nuove righe nelle stringhe senza virgolette doppie:

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

Quale può essere utile se la tua paura irrazionale delle doppie virgolette non conosce limiti. Anche se temo che questa cura possa essere peggiore della malattia.


Non è una paura .. ottieni solo prestazioni migliori quando usi le virgolette singole, quindi provo ad usarle più spesso quindi no .. ma sì, questa non è davvero un'ottima soluzione per questo problema, è più un problema che un valore . Grazie.
Matt,

5
Non l'ho provato ma scommetterei che usare le virgolette doppie è più veloce dell'uso printfo della catenazione delle stringhe in generale.
Mikko Rantalainen

Non è sempre irrazionale, le doppie virgolette possono essere problematiche, a seconda di cosa vuoi fare. echo 'For example, I want this to spit out php code.\necho $this->stuff;';
David Baucum,

@DavidBaucum, so che questo è un vecchio thread, ma solo come riferimento per te stesso e chiunque altro si imbatte in questo, echo "For example, I want this to spit out php code.\necho \$test;";- come puoi vedere puoi sfuggire alle variabili, il che risolve il problema che descrivi con doppie virgolette.
Josh Wood,

9

C'è una differenza nell'uso di virgolette doppie VS singole in PHP

ad es .: 1. echo '$var\n'; 2.echo "$var\n";

  • in 1, PHP stamperà letteralmente: $var\n
  • in 2, PHP dovrà cercare la posizione in memoria $vare restituire il valore in quella posizione, inoltre, dovrà analizzare \ n come un nuovo carattere di riga e stampare quel risultato

Siamo nel range di milionesimi di secondo, ma c'è una differenza nelle prestazioni. Ti consiglierei di utilizzare virgolette singole ogni volta che è possibile, anche sapendo che non sarai in grado di percepire questo aumento delle prestazioni. Ma sono uno sviluppatore paranoico quando si tratta di prestazioni.


Ti applaudo per aver cercato il modo migliore per farlo invece di utilizzare la soluzione a virgolette doppie AKA La soluzione pigro-sviluppatore.
Linuxdev,

Il modo migliore che conosco per fare quello che vuoi: echo 'foo', "\ n";
Linuxdev,

3
Il modo più veloce per farlo èecho $var + "\n";
Hengjie,

2
@Hengjie: probabilmente intendi echo $var . "\n";.
Skippy le Grand Gourou,

@linuxdev: non vedo il punto di questa risposta. Dato che l'output di 1 non è lo stesso dell'output di 2 (anche supponendo $var='$var'...), non stai confrontando le mele con le arance?
Skippy le Grand Gourou,

8

L'unica sequenza di escape che è possibile utilizzare tra virgolette singole è per la virgoletta singola stessa.

$foo = 'That\'s great';

L'unico modo per inserire una nuova riga in una stringa creata con virgolette singole consiste nell'inserire una nuova riga letterale

$bar = 'That\'s
cheating';

1
Rispetto alle altre risposte, la soluzione più semplice.
Kai Noack,

5

Mi chiedo perché nessuno abbia aggiunto l'alternativa all'utilizzo della funzione chr():

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

o, più efficace se lo ripeterai un milione di volte:

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

Questo evita la notazione dall'aspetto sciocco di concatenare una stringa a virgoletta singola e doppia.


1
Questa sembra la soluzione IMO più carina, più delicata e portatile.
Daraul,

3

Puoi prendere in considerazione l'utilizzo di <<<

per esempio

<<<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

Maggiori informazioni su: http://php.net/manual/en/language.types.string.php

A proposito: alcuni ambienti di codifica non sanno come gestire la sintassi sopra.


1
Ah sì ... ma odio ancora il fatto che VARIABLE alla fine rompa tutti i rientri nel tuo codice ... Ho incontrato così tanti (stupidi) errori usando la sintassi HEREDOC
Matt,

0

No, secondo la documentazione , PHP non riconosce alcun simbolo speciale tra virgolette singole. E non esiste un unico motivo per utilizzare le virgolette singole il più possibile


Vi è un leggero aumento delle prestazioni nell'uso delle virgolette singole. Inoltre, sembra una buona pratica definire esplicitamente quando si desidera sostituire le variabili.
Jackson Miller,

4
@Jackson non c'è aumento delle prestazioni. Con qualsiasi mezzo. Dimentica queste voci infantili. E no, non parlare di variabili, ma di sequenze speciali. Se vuoi che una sequenza, una variabile o una nuova riga vengano espanse, usa le doppie virgolette, per il suo scopo . E OP rifiuta di usarlo per il suo scopo è una sciocchezza.
Il tuo senso comune

Non c'è assolutamente alcun motivo per non usare le doppie virgolette quando si desidera interpolare una variabile all'interno di una stringa. Lo stesso vale con un escape /nper le interruzioni di riga. E 'più facile, più pulito, più leggibile e ha lo zero penalizzazione delle prestazioni.
Victor Schröder,

0

nel caso abbiate una variabile:

$your_var = 'declare your var';
echo 'i want to show my var here'.$your_var.'<br>';


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.