#javascript #php #variables #echo #alert
#php #строка #синтаксис
Вопрос:
Я немного смущен, почему я вижу некоторый код в PHP со строкой, заключенной в одинарные кавычки, а иногда и в двойные кавычки.
Я просто знаю, что в .NET или на языке C, если он заключен в одинарную кавычку, это означает, что это символ, а не строка.
Ответ №1:
Строки PHP могут быть указаны не только двумя, но и четырьмя способами.
- Строки в одинарных кавычках будут отображать вещи почти полностью «как есть». Переменные и большинство escape-последовательностей не будут интерпретироваться. Исключением является то, что для отображения буквальной одинарной кавычки вы можете экранировать ее с помощью обратной косой
'
черты , а для отображения обратной косой черты вы можете экранировать ее с помощью другой обратной косой\
черты (так что да, даже строки, заключенные в одинарные кавычки, анализируются). - Строки в двойных кавычках будут отображать множество экранированных символов (включая некоторые регулярные выражения), а переменные в строках будут оцениваться. Важным моментом здесь является то, что вы можете использовать фигурные скобки для выделения имени переменной, которую вы хотите вычислить. Например, предположим, у вас есть переменная
$type
, и вы хотитеecho "The $types are"
. Это будет искать переменную$types
. Чтобы обойти это использованиеecho "The {$type}s are"
, вы можете поместить левую фигурную скобку перед или после знака доллара. Взгляните на синтаксический анализ строк, чтобы увидеть, как использовать переменные массива и тому подобное. - Синтаксис строки Heredoc работает как строки в двойных кавычках. Это начинается с
<<<
. После этого оператора предоставляется идентификатор, затем перевод строки. Далее следует сама строка, а затем тот же идентификатор снова, чтобы закрыть цитату. Вам не нужно экранировать кавычки в этом синтаксисе. - Синтаксис строк Nowdoc (начиная с PHP 5.3.0) работает по существу как строки в одинарных кавычках. Разница в том, что не нужно экранировать даже одинарные кавычки или обратную косую черту. Nowdoc идентифицируется с той же
<<<
последовательностью, что и для heredocs, но следующий идентификатор заключен в одинарные кавычки, например<<<'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
были преобразованы в строку с настоящими буквами.
Ответ №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. @Bahman. О Я знаю, что прошли годы, и вы, вероятно, уже знаете ответ к этому моменту, но на случай, если другие ожидают того же в будущем: фигурные ветви добавляются, когда переменные используются в двойных кавычках, в первую очередь для удобства чтения кода. Очень полезно при быстром сканировании в grok, это var, а не строковый литерал.
4. @Bahman. A Я считаю, что причина, по которой вы бы использовали
"{$one}"
вместо"$one"
, заключается не в удобочитаемости, а в точном поиске переменных.{ }
также позволяет выполнять поиск по массивам и объектам. Оператор dot, используемый для объединения строк, все равно потребуется для поиска функции
Ответ №4:
Строка, заключенная в одинарные кавычки, не интерпретирует переменные внутри нее. Строка, заключенная в двойные кавычки, делает.
Кроме того, строка, заключенная в двойные кавычки, может содержать апострофы без обратной косой черты, в то время как строка, заключенная в одинарные кавычки, может содержать неэкранированные кавычки.
Строки в одинарных кавычках быстрее во время выполнения, потому что их не нужно анализировать.
Комментарии:
1. Строки в одинарных кавычках также используют меньше памяти. Самый быстрый способ обработки строк в PHP — это использование одинарных кавычек и . оператор для объединения строк и переменных.
2. хммм, поправьте меня, если я ошибаюсь, но базовым языком для PHP является C, верно? Тогда почему строковые кавычки отличаются в PHP и C?
3. @rob waminal: PHP может быть реализован на C, но это другой язык. Язык PHP определяет эту семантику.
4. @Ribald — Разве синтаксис nowdoc не был бы быстрее? Строки, заключенные в одинарные кавычки, анализируются на наличие экранированных одинарных кавычек и обратной косой черты.
5. @Peter, возможно, ты прав, я никогда не удосуживался по-настоящему вникнуть в это. В документации 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'
, , в то время как двойные кавычки используются для определения строки, содержащей идентификатор like "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.';
Конечно, вы также можете добавлять переменные, если это необходимо. Только не забывайте, что они оцениваются только в двойных кавычках!