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

126

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

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

Matt
источник
Если кого-то интересует решение, которое работает как для браузера, так и для терминала (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);

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

leepowers
источник
Это не страх ... вы просто получаете лучшую производительность, когда используете одинарные кавычки, поэтому я стараюсь использовать их чаще, чем нет ... но да, это действительно не лучшее решение для этой проблемы, это больше проблем, чем его ценность , Спасибо.
Мэтт
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 как символ новой строки и распечатать этот результат

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

linuxdev
источник
Я аплодирую вам за попытку найти лучший способ сделать это вместо использования решения с двойными кавычками 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;

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

NewSites
источник
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

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

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

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

Ваш здравый смысл
источник
Использование одинарных кавычек дает небольшое увеличение производительности. Кроме того, кажется хорошей практикой явно определять, когда вы хотите заменить переменные.
Джексон Миллер
4
@Jackson нет прироста производительности. С помощью любых средств. Забудьте эти детские слухи. И нет, говорите не о переменных, а о специальных последовательностях. Если вы хотите какой - либо последовательности, переменную или символ новой строки будет расширен - использовать двойные кавычки, на его цели . И отказ OP использовать его по назначению - нонсенс.
Your Common Sense
Нет абсолютно никаких причин не использовать двойные кавычки, когда вы хотите интерполировать переменную внутри строки. То же самое и с экранированием /nдля разрывов строк. Это проще, чище, удобочитаемее и не имеет потери производительности.
Виктор Шредер,
0

если у вас есть переменная:

$your_var = 'declare your var';
echo 'i want to show my var here'.$your_var.'<br>';
Брахам Юсеф
источник
0

Вы можете использовать это:

echo 'Hello World' . "\n";
Cisco Test
источник
-1

У меня это сработало:

print_r('Hello world'.PHP_EOL);
Мохаммад Заид Патан
источник