Drukuj znak nowej linii w PHP w pojedynczych cudzysłowach


125

W miarę możliwości staram się używać pojedynczych cudzysłowów i zauważyłem, że nie mogę używać znaków \ ​​n w pojedynczych cudzysłowach. Wiem, że mogę po prostu wprowadzić nową linię dosłownie, naciskając klawisz Return, ale to psuje wcięcie mojego kodu.

Czy jest jakiś znak ASCII lub coś, co mogę wpisać, co spowoduje utworzenie nowej linii, gdy używam apostrofów?


Jeśli ktoś jest zainteresowany rozwiązaniem, które działa zarówno dla przeglądarki, jak i terminala (cli, wiersz poleceń): stackoverflow.com/a/9665253/1923625
Omar Tariq

Szczerze mówiąc, nie ma żadnego powodu, aby szukać pojedynczych cudzysłowów za wszelką cenę . Obie składnie mają swój powód. Jeśli chcesz interpolowane zmienne lub sekwencje ze zmianą znaczenia, powinieneś celowo używać podwójnych cudzysłowów . Dobrą zasadą do przestrzegania jest: zawsze używaj apostrofów, chyba że chcesz używać cudzysłowów z dobrego powodu . Taka jest konsekwencja, moi przyjaciele.
Victor Schröder

Odpowiedzi:


142

Nie, ponieważ pojedyncze cudzysłowy uniemożliwiają nawet zamianę kodu szesnastkowego.

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

1
Ach ok .. Miałem nadzieję, że nie będę musiał się do tego uciekać .. Dzięki!
Matt

tak jest. Odpowiedział w mniej niż 10 minut. Na akceptację musiałem poczekać, a potem o tym zapomniałem haha.
Matt

1
Czy jest jakaś alternatywa dla tego? Muszę używać go w preg_replace, że nie mogę używać cudzysłowów w.
Alex Hadley

1
To nie jest właściwe rozumowanie. Nie, ponieważ w PHP nie można wyrazić znaku nowej linii w pojedynczych cudzysłowach. I to wszystko. Przeczytanie instrukcji mogłoby pomóc :)
hakre

3
@hakre Z pewnością przeczytanie podręcznika mogłoby pomóc, ale na szczęście StackOverflow to miejsce, w którym można wygodnie znaleźć dokładnie te odpowiedzi;)
Frederik Krautwald

108
echo 'hollow world' . PHP_EOL;

Użyj stałej PHP_EOL, wtedy jest ona również niezależna od systemu operacyjnego.


4
Zwykle nie powinieneś używać PHP_EOL, ponieważ uzależnia to twój kod od systemu, na którym jest uruchomiony. Np. Twój serwer Linux komunikuje się z innym serwerem, a następnie twój serwer zostaje zastąpiony przez Windows ... Niedobrze.
Andreas

25

Jeśli echokorzystasz <br/>z przeglądarki, możesz użyć w swoim oświadczeniu:

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

3
Niestety jest to bardziej do celów terminalowych ... dzięki za odpowiedź.
Matt

Spróbuj tego w e-mailu zawierającym tylko tekst;)
Kai Noack

22

FYI jest możliwe, aby uzyskać znaki nowej linii w ciągach bez podwójnych cudzysłowów:

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

Co może być przydatne, jeśli Twój irracjonalny strach przed podwójnymi cudzysłowami nie zna granic. Chociaż obawiam się, że to lekarstwo może być gorsze niż choroba.


To nie jest strach ... po prostu uzyskujesz lepszą wydajność, gdy używasz pojedynczych cudzysłowów, więc staram się ich używać częściej niż nie ... ale tak, to nie jest naprawdę świetne rozwiązanie tego problemu, to więcej kłopotu niż jego wartości . Dzięki.
Matt

5
Nie testowałem tego, ale założę się, że używanie podwójnych cudzysłowów jest szybsze niż używanie printflub ogólnie catenation stringów.
Mikko Rantalainen

Nie zawsze jest to irracjonalne, podwójne cudzysłowy mogą być problematyczne, w zależności od tego, co chcesz zrobić. echo 'For example, I want this to spit out php code.\necho $this->stuff;';
David Baucum

@DavidBaucum, wiem, że to stary wątek, ale tylko w celach informacyjnych dla echo "For example, I want this to spit out php code.\necho \$test;";ciebie i każdego, kto się na to natknie - jak widzisz, możesz uciec od zmiennych, co rozwiązuje problem, który opisujesz podwójnymi cudzysłowami.
Josh Wood

9

Istnieje różnica w używaniu pojedynczych podwójnych cudzysłowów VS w PHP

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

  • w 1 PHP wypisze dosłownie: $var\n
  • w 2, PHP będzie musiało wyszukać lokalizację w pamięci $vari zwrócić wartość w tej lokalizacji, a także będzie musiało przeanalizować \ n jako znak nowego wiersza i wydrukować ten wynik

Jesteśmy w zakresie milionowych części sekundy, ale JEST różnica w wydajności. Zalecałbym używanie pojedynczych cudzysłowów, gdy tylko jest to możliwe, nawet wiedząc, że nie będziesz w stanie dostrzec tego wzrostu wydajności. Ale jestem paranoicznym programistą, jeśli chodzi o wydajność.


Brawo wam za próbę wyszukania najlepszego sposobu zrobienia tego zamiast używania rozwiązania z podwójnymi cudzysłowami AKA The lazy-developer-solution.
linuxdev

Najlepszy znany mi sposób robienia tego, co chcesz: echo 'foo', "\ n";
linuxdev

3
echo $var + "\n";
Najszybszym

2
@Hengjie: Prawdopodobnie masz na myśli echo $var . "\n";.
Skippy le Grand Gourou

@linuxdev: Nie widzę sensu tej odpowiedzi. Ponieważ wynik 1 i tak nie jest tym samym, co wynik 2 (nawet zakładając $var='$var'…), nie porównujesz jabłek z pomarańczami?
Skippy le Grand Gourou

8

Jedyną sekwencją ucieczki, której można użyć w apostrofach, jest sam cudzysłów.

$foo = 'That\'s great';

Jedynym sposobem wstawienia nowego wiersza do ciągu utworzonego za pomocą pojedynczych cudzysłowów jest wstawienie dosłownego znaku nowej linii

$bar = 'That\'s
cheating';

1
To w porównaniu z innymi odpowiedziami najłatwiejszym rozwiązaniem.
Kai Noack

5

Zastanawiam się, dlaczego nikt nie dodał alternatywy korzystania z funkcji chr():

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

lub bardziej wydajne, jeśli zamierzasz powtórzyć to milion razy:

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

Pozwala to uniknąć głupiej notacji łączenia ciągu znaków w pojedynczych i podwójnych cudzysłowach.


1
Wygląda na to, że jest to najpiękniejsze, najbardziej przyjazne dla kłaczków, przenośne rozwiązanie IMO.
daraul

3

Możesz rozważyć użycie <<<

na przykład

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

Więcej informacji na: http://php.net/manual/en/language.types.string.php

Przy okazji - niektóre środowiska kodowania nie wiedzą, jak radzić sobie z powyższą składnią.


1
Ach tak ... ale nadal NIENAWIDZĘ faktu, że VARIABLE na końcu łamie wszystkie wcięcia w twoim kodzie ... Napotkałem tak wiele (głupich) błędów przy użyciu składni HEREDOC
Matt

0

Nie, zgodnie z dokumentacją PHP nie rozpoznaje żadnego specjalnego symbolu w apostrofach. I nie ma powodu, aby używać pojedynczych cudzysłowów tak często, jak to możliwe


Stosowanie pojedynczych cudzysłowów nieznacznie zwiększa wydajność. Wydaje się również, że dobrą praktyką jest jawne zdefiniowanie, kiedy chcesz zastąpić zmienne.
Jackson Miller,

4
@Jackson nie ma wzrostu wydajności. Dowolnymi środkami. Zapomnij o tych dziecinnych plotkach. I nie, nie mów o zmiennych, ale o specjalnych sekwencjach. Jeśli chcesz dowolną sekwencję, zmienna lub przełamane zostać rozszerzony - używać cudzysłowów, na jego potrzeby . A odmowa używania go do swoich celów jest nonsensem.
Twój zdrowy rozsądek

Nie ma absolutnie żadnego powodu, aby nie używać podwójnych cudzysłowów, gdy chcesz interpolować zmienną wewnątrz ciągu. To samo dotyczy znaku ucieczki /ndla znaków końca linii. Jest prostszy, czystszy, bardziej czytelny i nie ma żadnego spadku wydajności.
Victor Schröder

0

w przypadku, gdy masz zmienną:

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.