Печатать новую строку в PHP в одинарных кавычках


126

Я стараюсь использовать как можно больше одинарных кавычек и заметил, что не могу использовать \ n в одинарных кавычках. Я знаю, что могу просто ввести новую строку буквально, нажав return, но это испортит отступы в моем коде.

Есть ли какой-нибудь символ ASCII или что-то, что я могу ввести, чтобы создать новую строку, когда я использую одинарные кавычки?


Если кого-то интересует решение, которое работает как для браузера, так и для терминала (cli, командная строка): stackoverflow.com/a/9665253/1923625
Омар Тарик

Честно говоря, нет никакой причины искать одинарные кавычки любой ценой . Оба синтаксиса служат основанию. Если вам нужны интерполированные переменные или экранированные последовательности, вы должны намеренно использовать двойные кавычки . Хорошее правило: всегда используйте одинарные кавычки, если вам не нужны двойные кавычки по уважительной причине . Это последовательность, друзья мои.
Виктор Шредер,

Ответы:


143

Нет, потому что одинарные кавычки запрещают замену шестнадцатеричного кода.

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

1
Ах, хорошо .. Я надеялся, что мне не придется прибегать к этому .. Спасибо!
Мэтт

да сэр. Он ответил менее чем за 10 минут. Мне пришлось подождать, пока я согласился, потом я забыл об этом, ха-ха.
Мэтт

1
Есть ли альтернатива этому? Мне нужно использовать его в preg_replace, в котором я не могу использовать двойные кавычки.
Alex Hadley

1
Это неправильное рассуждение. Нет, потому что в PHP вы не можете выразить символ новой строки в одинарных кавычках. И это все. Чтение мануала могло бы помочь :)
hakre

3
@hakre Конечно, чтение руководства могло бы помочь, но, к счастью, StackOverflow - это то место, где можно удобно искать именно эти ответы;)
Фредерик Краутвальд

108
echo 'hollow world' . PHP_EOL;

Используйте константу PHP_EOL, тогда она также не зависит от ОС.


4
Обычно вам не следует использовать PHP_EOL, поскольку это делает ваш код зависимым от системы, в которой он работает. Например, ваш сервер Linux обменивается данными с другим сервером, а затем ваш сервер заменяется Windows ... Не хорошо.
Андреас

25

Если вы echoиспользуете браузер, вы можете использовать <br/>со своим оператором:

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

3
К сожалению, это больше для терминальных целей .. спасибо за ваш ответ.
Мэтт

Попробуйте это в текстовом электронном письме;)
Кай Ноак,

22

К вашему сведению, можно добавлять новые строки в строки без двойных кавычек:

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

Что может быть полезно, если ваш иррациональный страх перед двойными кавычками не знает границ. Хотя я боюсь, что это лекарство может быть хуже самой болезни.


Это не страх ... вы просто получаете лучшую производительность, когда используете одинарные кавычки, поэтому я стараюсь использовать их чаще, чем нет ... но да, это действительно не лучшее решение для этой проблемы, это больше проблем, чем его ценность , Спасибо.
Мэтт

5
Я не тестировал его, но готов поспорить, что использование двойных кавычек быстрее, чем использование printfцепочки строк в целом.
Микко Ранталайнен

Это не всегда иррационально, двойные кавычки могут быть проблематичными, в зависимости от того, что вы хотите сделать. echo 'For example, I want this to spit out php code.\necho $this->stuff;';
Дэвид Баукум

@DavidBaucum, я знаю, что это старая ветка, но только для справки для вас и всех, кто наткнется на нее, echo "For example, I want this to spit out php code.\necho \$test;";- как вы видите, вы можете избежать переменных, что решает проблему, которую вы описываете с помощью двойных кавычек.
Джош Вуд,

9

Есть разница в использовании одинарных двойных кавычек VS в PHP

например: 1. echo '$var\n'; 2.echo "$var\n";

  • в 1 PHP будет печатать буквально: $var\n
  • во 2 PHP должен будет искать место в памяти $varи возвращать значение в этом месте, кроме того, ему нужно будет проанализировать \ n как символ новой строки и распечатать этот результат

Мы находимся в диапазоне миллионных долей секунды, но есть разница в производительности. Я бы порекомендовал вам по возможности использовать одинарные кавычки, даже зная, что вы не заметите этого увеличения производительности. Но когда дело касается производительности, я - разработчик-параноик.


Я аплодирую вам за попытку найти лучший способ сделать это вместо использования решения с двойными кавычками AKA The lazy-developer-solution.
linuxdev

Лучший из известных мне способов делать то, что вы хотите: echo 'foo', "\ n";
linuxdev

3
Самый быстрый способ сделать этоecho $var + "\n";
Хэнцзе

2
@Hengjie: Вы, наверное, имеете в виду echo $var . "\n"; .
Скиппи ле Гран Гуру

@linuxdev: Я не вижу смысла в этом ответе. Поскольку результат 1 в любом случае не совпадает с результатом 2 (даже если предположить $var='$var'…), разве вы не сравниваете яблоки с апельсинами?
Скиппи ле Гран Гуру

8

Единственная escape-последовательность, которую вы можете использовать в одинарных кавычках, - это сама одиночная кавычка.

$foo = 'That\'s great';

Единственный способ вставить новую строку в строку, созданную с помощью одинарных кавычек, - это вставить буквальную новую строку

$bar = 'That\'s
cheating';

1
Это по сравнению с другими ответами самое простое решение.
Кай Ноак

5

Интересно, почему никто не добавил альтернативу использованию функции chr():

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

или, что более эффективно, если вы собираетесь повторить это миллион раз:

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

Это позволяет избежать глупо выглядящей нотации конкатенации строки в одинарных и двойных кавычках.


1
Это кажется самым красивым, наиболее удобным для ворса портативным решением IMO.
daraul

3

Вы можете рассмотреть возможность использования <<<

например

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

Больше информации: http://php.net/manual/en/language.types.string.php

Кстати, некоторые среды программирования не знают, как обрабатывать указанный выше синтаксис.


1
Ах да ... но я все еще НЕНАВИЖУ тот факт, что VARIABLE в конце ломает все отступы в вашем коде ... Я столкнулся с таким количеством (глупых) ошибок, используя синтаксис HEREDOC
Мэтт

0

Нет, согласно документации , PHP не распознает специальные символы в одинарных кавычках. И нет единственной причины использовать как можно больше одинарных кавычек.


Использование одинарных кавычек дает небольшое увеличение производительности. Кроме того, кажется хорошей практикой явно определять, когда вы хотите заменить переменные.
Джексон Миллер

4
@Jackson нет прироста производительности. С помощью любых средств. Забудьте эти детские слухи. И нет, говорите не о переменных, а о специальных последовательностях. Если вы хотите какой - либо последовательности, переменную или символ новой строки будет расширен - использовать двойные кавычки, на его цели . И отказ OP использовать его по назначению - нонсенс.
Your Common Sense

Нет абсолютно никаких причин не использовать двойные кавычки, когда вы хотите интерполировать переменную внутри строки. То же самое и с экранированием /nдля разрывов строк. Это проще, чище, удобочитаемее и не имеет потери производительности.
Виктор Шредер,



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.