Разница между двойными и одинарными кавычками в PHP. Php кавычки, кавычки одинарные, двойные, экранирование Что означают переменные в одинарных кавычках php

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

Теперь мы можем придумать ещё одно решение задачи из урока Переменные в PHP :

$title"; echo "

$content
"; ?>

Как PHP находит переменную в строке?

Всё просто. Помните, какие символы могут использоваться в названии переменной? Это цифры, буквы и подчёркивание _ .

Вот PHP и принимает за название всё, что находится между символом $ и первым запрещённым символом.

В следующем коде PHP неправильно определит название переменной и выдаст ошибку:

Результат в браузере:

Notice: Undefined variable: priceруб in D:\OpenServer\domains\сайт\index.php on line 3

Чтобы PHP правильно определил название переменной в строке, нужно поместить её в фигурные скобки {} :

Результат в браузере:

1499руб

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

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

Экранирование кавычек

Если вам нужно поместить кавычки внутрь строки, есть 2 способа это сделать:

Во втором примере обратный слеш \ экранирует следующую за ним кавычку, чтобы PHP воспринял её как строку.

Как думаете, что нужно сделать, чтобы вывести на экран только обратный слеш? Ведь он будет экранировать закрывающую кавычку. Забавно, но нужно написать второй слеш для экранирования первого:

Табуляция и перенос строки в двойных кавычках

Обратный слеш в двойных кавычках позволяет экранировать не только кавычки и самого себя, но и некоторые другие символы. Наиболее популярные из них - это табуляция (длинный пробел, который вы получаете при нажатии TAB) и перенос строки. Выглядят они следующим образом:

Напишите скрипт, который:
1. Создаёт переменную $type со значением Игра .
2. Создаёт переменную $name со значением "World of Warcraft" (с кавычками).
3. Выводит обе переменные внутри тега

. Между переменными должен быть пробел.

Я не эксперт в PHP-программировании, но я немного смущен, почему я вижу некоторый код в PHP со строкой, помещенной в одинарные кавычки, а иногда и в двойные кавычки.

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

11 ответов

что вы должны знать

$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";

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

пример одиночных, двойных, heredoc и nowdoc кавычек

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

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

$test = "variable"; echo "Hello Mr $test"; // the output would be: Hello Mr variable echo "Hello Mr $test"; // the output would be: Hello Mr $test

здесь двойная кавычка анализирует значение, а одинарная кавычка рассматривается как строковое значение (без разбора переменной $test.)

возможно, я немного опоздал, и немного не по теме, но все же...

вам не нужно выбирать из-за содержимого вашей строки между:
alert("It"s \"game\" time."); или alert("It\"s "game" time.");

вместо этого вы можете ввести вот так, а затем использовать двойные или одинарные кавычки, потому что это не имеет значения:
alert("It’s “game” time."); и alert("It’s “game” time.");

$name = "test"; $singleQuote = "This is example for single quote $name"; // here $name variable not evaluating echo $singleQuote; // Output: This is example for single quote $name $singleQuote = "This is example for single quote $name"; // here $name variable will evaluate and replace variable value echo $singleQuote; // Output: This is example for single quote test Also inside single quote expression evaluate faster campare to double quotes

одно:

очень важно отметить, что строка с закрывающим идентификатором помощи heredoc должен содержать никаких других символов, кроме точка с запятой (;) . Это означает, что идентификатор не может быть отступом , и не может быть помещения или вкладки до или после запятой.

пример:

$str = <<

Какой вид кавычек использовать для оформления строк - апострофы или классические двойные кавычки?

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

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

Причина здесь проста: строки в двойных кавычках интерпретатор PHP дополнительно проверяет на наличие переменных и если такие находятся, то вместо имени переменной в строку вставляется ее значение. А вот строка, заключенная в апострофы, воспринимается интерпретатором как обычный текст и никаких преобразований в этих строках PHP не проводит. Думаю, понятно, что обработка строк в одинарных кавычках в любом случае будет происходить быстрее.

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

Самый простой способ определить строку - это заключить ее в одинарные кавычки ("). Для того, чтобы использовать одинарные кавычки внутри строки, заключенного в одинарные кавычки, их необходимо опередить символом обратной косой черты (\), то есть экранировать. Если обратная косая черта должна идти перед одинарной кавычкой или быть в конце строки, вам необходимо продублировать ее. Если попробуете экранировать любой другой символ, обратная косая черта также будет напечатана.

Приведем пример использования одинарных кавычек:
// Выведет: Простая строка
echo "Простая строка";
// Выведет: I"m here
echo "I\"m here";
// Выведет: Это не вставит: \n новую строку
echo "Это не вставит: \n новую строку";
// Выведет: Переменная $example тоже не подставится
echo "Переменная $example тоже не подставится"; Если строка заключена в двойные кавычки ("), PHP распознает большее количество управляющих последовательностей для специальных символов а также подставляет вместо имени переменной в строку ее значение. Так же, как и с одинарными кавычками, для того, чтобы использовать двойные кавычки внутри строки, заключенного в двойные кавычки, их необходимо опередить символом обратной косой черты (\).

Приведем пример использования двойных кавычек:
// Выведет: Простая строка
echo "Простая строка";
// Выведет: Фирма "Подснежник ""
echo "Фирма \"Подснежник\"";
// Выведет: Это переведет на новую строку
echo "Это переведет на новую строку \n";
// Выведет: Переменная подставится
$example = "подставится";
echo "Переменная $example"; Следует также помнить, что последовательность "\n" (новая строка), "\r" (возврат каретки) для обычного текста, а не для HTML. Так что в браузере Вы не увидите изменений (только в исходном коде страницы).

Давайте выясним, насколько быстрее одинарные кавычки двойных. Для замеров напишем короткий тестовый скрипт, и сразу заметим, что если Вы у себя будете его тестировать, результаты, которые зависят от аппаратной части вашего ПК или сервера, будут другие.
// Возвращаем метку времени в начале цикла
$start = microtime(true);
// Создаем цикл цикл на 1 млн итераций
for ($i = 0; $i < 1000000; $i++) {
$text = "Здесь символьная строка";
}
// Вычисляем потраченное время
$time = (microtime(true) - $start); Результат: 0.09 секунды.

Если мы заменим одинарные кавычки на двойные:
$text = "Здесь символьная строка"; Результат будет равен 0.10 секунды.

Как видим, при использовании текстовых строк разница во времени выполнения совсем небольшая, даже можно сказать и вовсе не существует. Самое интересное начнется, когда попробуем совместить строку и переменную.
$text = "Здесь символьная строка $i"; или
$text = $i."Здесь символьная строка"; Результат приблизительно: 0.27 секунды.

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

Когда сервер обрабатывает код, он проверяет все содержимое двойных кавычек на наличие переменных, констант и другое. Это занимает время. А то, что находится между одинарными кавычками сервер обрабатывает как готовый текст и ему все равно, что там находится. Разница между быстродействием одинарных и двойных кавычек очень незначительная, но если Вы будете заниматься разработкой высоко нагруженного проекта, то несколько сэкономленных миллисекунд - это уже победа.

Значениями типа string являются текстовые строки (кратко строки). Строка — это последовательность из нуля или более символов. Символы включают в себя буквы, цифры, знаки пунктуации, специальные символы и пробелы.

Строка может быть определена четырьмя различными способами:

  • двойными кавычками
  • одинарными кавычками
  • heredoc-синтаксисом
  • nowdoc-синтаксисом

Строка в двойных кавычках

Строка в двойных кавычках:

В строках с двойными кавычками можно использовать управляющие последовательности. Управляющая последовательность — это специальные символы предназначенные для форматирования текстового вывода. В PHP доступны следующие управляющие последовательности:

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


Знак доллара: \$";

Строки, заключённые в двойные кавычки, могут содержать символы одинарных кавычек:

Echo "Одинарная кавычка: "";

Строка в одинарных кавычках (апострофах)

Строка в одинарных кавычках:

$str = "Строка"; echo "Одну большую строку можно разбить на несколько маленьких строк, чтобы её было удобнее читать.";

В отличие от строк в двойных кавычках и heredoc-синтаксиса, переменные и управляющие последовательности (за одним исключением), заключённые в одинарные кавычки, не обрабатываются. Это означает, что они будут интерпретированы как обычные символы строки:

$num = 10; echo "Число: $num
Знак доллара: \$";

Чтобы в строке, заключённой в одинарные кавычки, можно было использовать одинарные кавычки, нужно их экранировать с помощью обратного слэша (\"). Если необходимо написать саму обратную косую черту, нужно продублировать её (\\):

Echo "Внутри используются \"одинарные\" кавычки"; echo "Обратный слэш: \\";

Строки, заключённые в одинарные кавычки, могут содержать символы двойных кавычек:

Echo "Двойная кавычка: "";

Heredoc-синтаксис

Heredoc-синтаксис — это альтернативный способ записи строк.

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

Heredoc-синтаксис начинается с трёх символов <<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Сразу после идентификатора должен следовать перевод на новую строку, никаких других символов кроме перевода на новую строку после идентификатора не должно быть, иначе возникнет ошибка. Далее идёт непосредственно строковое содержимое. После строкового содержимого, на отдельной строке, должен быть указан закрывающий идентификатор (тот же, что и после <<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

Nowdoc-синтаксис

Nowdoc-синтаксис также как и Heredoc является альтернативным способом записи строк.

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

Синтаксис Nowdoc похож на Heredoc с той лишь разницей, что открывающий идентификатор обязательно должен быть заключён в одинарные кавычки:

$num = 10; echo <<<"some_id" Число: $num some_id;

Обработка переменных в строках

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

Простой синтаксис — это когда имя переменной указывается в строке как есть.

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

$str = "World!"; echo "Hello $str";

Сложный синтаксис — это когда имя переменной заключается в фигурные скобки.

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

$sport1 = "волей"; $sport2 = "фут"; echo "Мне нравится $sport1бол и $sport2бол";

В данном случае не будет достигнут желаемый результат, поскольку интерпретатор будет считать $sport1 как часть имени переменной $sport1бол, которой не существует.

Чтобы явно указать интерпретатору, где оканчивается имя переменной требуется заключить имя переменной в фигурные скобки:

$sport1 = "волей"; $sport2 = "фут"; echo "Мне нравится {$sport1}бол и {$sport2}бол.";

Знак доллара может быть расположен как перед фигурной скобкой, так и после неё:

$sport1 = "волей"; $sport2 = "фут"; echo "Мне нравится ${sport1}бол и {$sport2}бол.";

Конкатенация

Конкатенация — это объединение двух или более строк в одну большую. Объединение происходит с помощью оператора конкатенации — . (точка). При конкатенации каждая последующая строка добавляется в конец предыдущей:

Значение любого типа, которое объединяется со строкой, будет неявно преобразовано в строку и далее будет произведена конкатенация:

"; echo "Число: " . 1; ?>

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

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

Решение

То, что вы должны знать,

$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";

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

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

$test = "variable"; echo "Hello Mr $test"; // the output would be: Hello Mr variable echo "Hello Mr $test"; // the output would be: Hello Mr $test

Здесь двойная кавычка анализирует значение, а одинарная кавычка рассматривается как строковое значение (без разбора переменной $ test.)

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