В чем разница между строками в одинарных и двойных кавычках в PHP?

# #php #pdo #google-cloud-sql #google-app-engine-php

Вопрос:

Я немного сбит с толку, почему я вижу некоторый код на PHP со строкой, заключенной в одинарные кавычки, а иногда и в двойные кавычки.

Я просто знаю, что в .NET или на языке C, если это в одинарной кавычке, это означает, что это символ, а не строка.

Ответ №1:

Строки PHP могут быть заданы не только двумя способами, но и четырьмя способами.

  1. Строки в одинарных кавычках будут отображать вещи почти полностью «как есть». Переменные и большинство escape-последовательностей не будут интерпретироваться. Исключение состоит в том, что для отображения буквальной одинарной кавычки вы можете избежать ее с помощью обратной косой ' черты , а для отображения обратной косой черты вы можете избежать ее с помощью другой обратной косой \ черты (так что да, даже строки в одинарных кавычках анализируются).
  2. В строках с двойными кавычками будет отображаться множество экранированных символов (включая некоторые регулярные выражения), а переменные в строках будут оцениваться. Важным моментом здесь является то, что вы можете использовать фигурные скобки для выделения имени переменной, которую вы хотите оценить. Например, предположим, что у вас есть переменная $type , и вы хотите echo "The $types are" ее использовать . Это будет искать переменную $types . Чтобы обойти это, используйте echo "The {$type}s are" Вы можете поставить левую скобку до или после знака доллара. Взгляните на синтаксический анализ строк, чтобы узнать, как использовать переменные массива и тому подобное.
  3. Синтаксис строки Heredoc работает как строки в двойных кавычках. Все начинается с <<< . После этого оператора указывается идентификатор, затем новая строка. Далее следует сама строка, а затем снова тот же идентификатор, чтобы закрыть кавычку. В этом синтаксисе вам не нужно экранировать кавычки.
  4. Строковый синтаксис Nowdoc (начиная с PHP 5.3.0) работает по существу как строки в одинарных кавычках. Разница в том, что даже одинарные кавычки или обратные косые черты не нужно экранировать. Nowdoc идентифицируется с той же <<< последовательностью, которая используется для heredoc, но следующий идентификатор заключен в одинарные кавычки, например <<<'EOT' . В nowdoc не выполняется синтаксический анализ.

Примечания: Одинарные кавычки внутри одинарных кавычек и двойные кавычки внутри двойных кавычек должны быть экранированы:

 $string = 'He said "What's up?"';
$string = "He said "What's up?"";
 

Скорость:
Я бы не придавал слишком большого значения тому, что одинарные кавычки быстрее двойных. Они, вероятно, быстрее в определенных ситуациях. Вот статья, объясняющая один из способов, которым одинарные и двойные кавычки, по сути, одинаково быстры, начиная с PHP 4.3 ( Useless Optimizations внизу, раздел C ). Кроме того, на этой странице тестов есть сравнение одинарных и двойных котировок. Большинство сравнений совпадают. Есть одно сравнение, в котором двойные кавычки медленнее, чем одинарные.

Комментарии:

1. 1 за трюк с фигурной скобкой. Я не знал об этом. Жаль, что он не следует тем же соглашениям, что и сценарии оболочки, т. Е. ${variablename} .

2. Я использую только двойные кавычки, когда мне это нужно n , все остальное в моем PHP коде заключено в одинарные кавычки.

3. кажется, «heredoc» портирован на PHP из bash или нет? В любом случае отличный ответ, так что 1 Спасибо.

4. Интересная заметка в комментариях к документации PHP: php.net/manual/en/language.types.string.php#120160 — «Строки в двойных кавычках», которые выглядят так медленно, так как им приходится анализировать все для n обратных косых черт и знаков доллара США, чтобы выполнить расширение переменной», оказались самым БЫСТРЫМ методом объединения строк в PHP-ПЕРИОД! Одинарные кавычки быстрее только в том случае, если ваша строка полностью буквальна (в ней нечего анализировать и нечего объединять), но поле очень маленькое и не имеет значения».

5. Примечание: медлительность " двойных кавычек-это все, что осталось в прошлом. Обновления увеличили скорость обработки двойных кавычек, чтобы в наши дни она была такой же быстрой во всех, кроме крайних случаев.

Ответ №2:

Вещи оцениваются в двойных кавычках, но не в одинарных:

 $s = "dollars";
echo 'This costs a lot of $s.'; // This costs a lot of $s.
echo "This costs a lot of $s."; // This costs a lot of dollars.
 

Комментарии:

1. Экранированные одинарные кавычки и экранированные обратные косые черты расширяются даже в строках в одинарных кавычках.

2. Ошибка, с которой сталкиваются многие разработчики, новички в PHP: $mailbody = 'I want a line break:nDone.'; сохранение n жизни. В то время как: $mailbody = "I want a line break:nDone."; проанализирует разрыв строки.

3.Мои два цента нужны только для собеседований или для разработки вредоносных программ. Просто сравните var_dump() из двух выражений: $testWithAsciiAndUtf8Characters = "x48x41x4c114117 u{0147}u{012B}u{0144}u{014D}!"; $simpleTest = 'x48x41x4c114117 u{0147}u{012B}u{0144}u{014D}!'; Последовательности символов в $testWithAsciiAndUtf8Characters были преобразованы в строку с реальными буквами.

4. Отличный пример @Dani, короткий и простой, как раз то, что мне было нужно. Спасибо

Ответ №3:

' Одна цитата

Самый простой способ указать строку-заключить ее в одинарные кавычки. Одинарная кавычка, как правило, быстрее, и все, что цитируется внутри, рассматривается как обычная строка.

Пример:

 echo 'Start with a simple string';
echo 'String's apostrophe';
echo 'String with a php variable'.$name;
 

" Двойные кавычки

Используйте двойные кавычки в PHP, чтобы избежать необходимости использовать точку для разделения кода (Примечание: Используйте фигурные скобки {} для включения переменных, если вы не хотите использовать оператор конкатенации ( . )) в строке.

Пример:

 echo "Start with a simple string";
echo "String's apostrophe";
echo "String with a php variable {$name}";
 

Есть ли преимущество в производительности одинарной кавычки по сравнению с двойной кавычкой в PHP?

ДА. Немного быстрее использовать одинарные кавычки.

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

Комментарии:

1. Единственное исключение из одинарных кавычек, КОТОРЫЕ НИЧЕГО не анализируют в строке, — это то, что вы можете использовать ' , чтобы избежать одного апострофа для использования в строке (или \' для отображения обратной косой черты). Обратите внимание, что традиционные escape-последовательности, такие как n , НЕ будут проанализированы до символа новой строки. PHP-документы по строкам

2. Я вижу во всех ответах, что: вы можете использовать имя переменной внутри двойной кавычки, чтобы распечатать значение переменной, но вы говорите, что имя переменной также должно быть заключено в фигурные скобки, чтобы избежать необходимости использования периода объединения. Итак, если и «$my_var», и «{$my_var}» выводят значение $my_var, для чего нужны фигурные скобки? Спасибо!

3. @Бахман. A Я знаю, что прошли годы, и вы, вероятно, уже знаете ответ к этому моменту, но на случай, если другие ожидают того же в будущем: фигурные ветви добавляются, когда переменные используются в двойных кавычках, в первую очередь для удобства чтения кода. Очень полезно при быстром сканировании в grok, это var, а не строковый литерал.

Ответ №4:

Строка в одинарных кавычках не содержит интерпретируемых переменных внутри нее. Строка в двойных кавычках делает это.

Кроме того, строка в двойных кавычках может содержать апострофы без обратных косых черт, в то время как строка в одинарных кавычках может содержать неэкранированные кавычки.

Строки в одинарных кавычках быстрее во время выполнения, потому что их не нужно анализировать.

Комментарии:

1. Строки в одинарных кавычках также используют меньше памяти. Самый быстрый способ обработки строк в PHP-это использование одинарных кавычек и использование . оператор для объединения строк и переменных.

2. хммм, поправьте меня, если я ошибаюсь, но базовый язык PHP-это C, верно? Тогда почему строковые кавычки отличаются в PHP и C?

3. @rob waminal: PHP может быть реализован на C, но это другой язык. Язык PHP определяет эту семантику.

4. @Ribald — Разве синтаксис nowdoc не был бы быстрее? Строки в одинарных кавычках анализируются на наличие экранированных одинарных кавычек и обратных косых черт.

5. @Питер, возможно, ты прав, я никогда не утруждал себя тем, чтобы по-настоящему вникнуть в это. Документация PHP утверждает о скорости, я решил поверить документам на веру. 🙂

Ответ №5:

В PHP оба 'my name' и "my name" являются строковыми. Вы можете прочитать больше об этом в руководстве по PHP.

Вещь, которую вы должны знать, это

 $a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'
 

В PHP люди используют одинарную кавычку для определения постоянной строки, например 'a' , 'my name' , 'abc xyz' , в то время как используют двойную кавычку для определения строки , содержащей идентификатор, например "a $b $c $d" .

И еще кое-что,

 echo 'my name';
 

это быстрее, чем

 echo "my name";
 

но

 echo 'my ' . $a;
 

медленнее, чем

 echo "my $a";
 

Это верно для других используемых строк.

Ответ №6:

Оба вида вложенных символов являются строками. Один тип цитаты удобно использовать для включения другого типа цитаты. "'" и. '"' Самое большое различие между типами кавычек заключается в том, что ссылки на вложенные идентификаторы заменяются внутри двойных кавычек, но не внутри одинарных кавычек.

Ответ №7:

Кто-то может сказать, что я немного не в теме, но в любом случае это так:

Вам не обязательно выбирать из-за содержимого вашей строки между:
echo "It's "game" time."; или echo 'It's "game" time.';

Если вы знакомы с использованием английских кавычек и правильным символом для апострофа, вы можете использовать двойные или одинарные кавычки, потому что это больше не будет иметь значения:
echo "It’s “game” time."; и echo 'It’s “game” time.';

Конечно, вы также можете добавить переменные, если это необходимо. Только не забывайте, что они оцениваются только в двойных кавычках!