Двойные и одинарные кавычки в php. В чем разница между одинарными и двойными кавычками в PHP? Двойные кавычки в php

В этой краткой статье показано, как и где стоит использовать кавычки в PHP .

Одинарные кавычки (апострофы) в PHP

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

// Правильно echo "Как жизнь?"; echo "Как жизнь? $name"; echo "Как жизнь? ".$name; // Неправильно echo "Как жизнь? $name";

Специальные символы в одинарных и двойных кавычках

Чтобы, например, символ табуляции (\t) интерпретировался как символ табуляции, а не как слеш и буква t, необходимо заключать строку с текстом, в которой содержится символ табуляции, в двойные кавычки. В одинарных кавычках можно использовать только \’ и \\ . Все остальные экранирующие последовательности (\n , \r , \$ и т.д.) недопустимо использовать в одинарных кавычках.

// Неправильно echo "Как жизнь? \n"; // Правильно echo "Как жизнь? \n";

Чтобы экранировать двойные кавычки внутри строки, поставьте кавычки перед обратным слэшем \" .

// Неправильно echo "

Как жизнь?

"; // Правильно echo "

Как жизнь?

"; echo "

Как жизнь?

";

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

Текст, заключенный в двойные кавычки, обрабатывается совсем по-другому. Например, переменные, заключенные в двойные кавычки, заменяются на их значения. Это делает удобным составлять SQL запросы при помощи двойных кавычек.

$query = "INSERT INTO table (post,author,text,date) VALUES ("$id","$author","$text","$date")";

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

Давайте разберем разницу между двойными и одинарными кавычками в 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 секунды.

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

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

Как вы видели в предыдущем уроке, команда echo в php является средством вывода текста. На протяжении своей карьеры в PHP вы будете использовать команду echo больше, чем любую другую. Так давайте в ней хорошенько разберемся!

Вывод строки

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

I love using PHP!"; ?>

Вывод фразы «Hello!» нам уже знаком, тут ничего нового. Зато следующая команда echo, как вы видите, содержит html тег. Использовать html теги не запрещается, ведь php дает нам динамику, а статика и оформление страницы все еще во власти обычного html.

Осторожно, двойные кавычки!

Это очень здорово, что вы можете выводить HTML внутри PHP. Тем не менее, вы должны быть осторожны при использовании HTML-кода или любой другой строки, содержащей кавычки! В Эхо используются кавычки, чтобы определить начало и конец строки, поэтому вы должны использовать один из следующих вариантов, если хотите использовать кавычки внутри echo:

  • Не используйте кавычки внутри строки.
  • Экранируйте внутренние кавычки через слеш. Чтобы избежать обработки внутренних кавычек, просто поставьте обратную косую черту прямо перед ними, то есть \».
  • Используйте одинарные кавычки (апострофы) на внутри строки.

Смотрите наш пример ниже для правильного и неправильного использования команды echo:

I love using PHP!"; // OK because we escaped the quotes! echo "

I love using PHP!
"; // OK because we used an apostrophe " echo "
I love using PHP!
"; ?>

Если вы хотите вывести строку, содержащую цитаты, либо используйте апостроф (‘), либо экранируйте кавычки поставив слеш перед ними (\»). Обратная косая черта скажет PHP, что вы хотите, чтобы символ после нее не был обработан интерпретатором!

Вывод переменных

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

Результат:

Hello Bob. My name is: 4a

Одновременный вывод переменных и текстовых строк

Вы также можете выводить переменные в двойных кавычках (например, «текст текст $variable»). Поставив переменную внутри кавычек («») вы говорите PHP, что вы хотите, чтобы он взял ее значение, преобразовал его к строковому типу и вывел. Пример ниже показывает как правильно сделать такой трюк:)

"; echo "Hi, I"m Bob. Who are you? $my_string
"; echo "Hi, I"m Bob. Who are you? $my_string Bobetta"; ?>

Результат:

Hello Bob. My name is: Bobetta Hi, I"m Bob. Who are you? Hello Bob. My name is: Hi, I"m Bob. Who are you? Hello Bob. My name is: Bobetta

Размещая переменные внутри строки, вы можете сэкономить время и сделать код более удобным для чтения, но к этому надо привыкнуть. Не забывайте использовать кавычки, одинарные кавычки не будут выводить значения переменных. Одинарные кавычки просто выведут имя переменной в строку, т.е. $ my_string, а не «Hello Bob. My name is».

Echo не является функцией!

Echo является не функцией, а языковой конструкцией. При использовании функции в PHP, они имеют очень конкретную форму, которую мы обязательно рассмотрим чуть позже. На данный момент, просто знайте, что echo это специальный инструмент, который вы обязательно полюбите! :D

Конкатенация строк PHP

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

Пример:


На выходе получаем строку целиком: «Широка страна моя родная!».

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

В PHP символ это то же самое, что и байт, это значит, что возможно ровно 256 различных символов. Это также означает, что PHP не имеет встроенной поддержки Unicode. Некоторую поддержку Unicode обеспечивают функции utf8_encode() и utf8_decode() .

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

Простой пример строковой переменной:

$ a = "Это просто текст, записанный в строковую переменную" ;
echo $ a ; //Выводит "Это просто текст, записанный в строковую переменную"
?>

А теперь подробно разберем синтаксис типа данных string .

Синтаксис типа string (строк)

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

Простейший способ определить строку - это заключить ее в одинарные кавычки (символ " ).

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

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

Приведем пример использования одинарных кавычек:

echo "это простая строка" ;

Echo "Также вы можете вставлять в строки
символ новой строки таким образом,
поскольку это нормально"
;

// Выведет: Однажды Арнольд сказал: "I"ll be back"
echo "Однажды Арнольд сказал: "I\"ll be back"" ;

Echo "Вы удалили C:\\*.*?" ;

// Выведет: Вы удалили C:\*.*?
echo "Вы удалили C:\*.*?" ;

// Выведет: Это не вставит: \n новую строку
echo "Это не вставит: \n новую строку" ;

// Выведет: Переменные $expand также $either не подставляются
echo "Переменные $expand также $either не подставляются" ;
?>

Если строка заключена в двойные кавычки (" ), PHP распознает большее количество управляющих последовательностей для специальных символов:

Таблица управляющих последовательностей:

Последовательность Значение
\n новая строка (LF или 0x0A (10) в ASCII)
\r возврат каретки (CR или 0x0D (13) в ASCII)
\t горизонтальная табуляция (HT или 0x09 (9) в ASCII)
\\ обратная косая черта
\$ знак доллара
\" двойная кавычка
\{1,3} последовательность символов, соответствующая регулярному выражению, символ в восьмеричной системе счисления
\x{1,2} последовательность символов, соответствующая регулярному выражению, символ в шестнадцатеричной системе счисления

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

Другой способ определения строк - это использование heredoc-синтаксиса ("<<< "). После <<< необходимо указать идентификатор, затем идет строка, а потом этот же идентификатор, закрывающий вставку.

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

Внимание! Очень важно отметить, что строка с закрывающим идентификатором не содержит других символов, за исключением, возможно, точки с запятой (; ). Это означает, что идентификатор и что не может быть никаких пробелов или знаков табуляции до или после точки с запятой. Важно также понимать, что первым символом перед закрывающим идентификатором должен быть символ новой строки, определенный в вашей операционной системе. Например, на Windows® это \r .

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

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

Пример определения heredoc-строки:

$str = <<Пример строки,
охватывающей несколько строчек,
с использованием heredoc-синтаксиса.
EOD;

/* Более сложный пример с переменными. */
class foo
{
var $foo ;
var $bar ;

Function foo ()
{
$this -> foo = "Foo" ;
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
}
}

$foo = new foo ();
$name = "МоеИмя" ;

Echo <<Меня зовут "$name". Я печатаю $foo -> foo.
Теперь я вывожу
{ $foo -> bar [ 1 ]} .
Это должно вывести заглавную букву "A":
\x41
EOT;
?>

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

Одинарные кавычки

Простейшим способом определить строку является — выделение текста в одинарные кавычки.

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

Управляющие последовательности в одинарных кавычках не работают.

Примеры использования одинарных кавычек :

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

Если выделить текст двойными кавычками, то строка будет определена также, как и одинарными. Но отличия у кавычек конечно же есть.

Ситуация с экранированием кавычек такая же, как и с одинарными кавычками.

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

Важнейшим отличием является тот факт, что двойные кавычки обрабатывают переменные.

Примеры использования двойных кавычек :

Заострим внимание на том, что строки с двойными кавычками обрабатывают переменные.

Что происходит при обработке строки? Интерпретатор проверяют каждую строку с двойными кавычками на переменные , т.е. происходит принудительный парсинг, на что уходит дополнительное время. Да, часто это доли секунды, но сам факт надо понимать. То есть если сравнить обработку разными кавычками одной строки (без переменных само собой), то строка с одинарными кавычками однозначно будет обработана быстрее.

Расчеты

На сайте ProfiPHP нашел интересные расчеты на данную тему. Автор написал простой скрипт, с помощью которого вычислял время на обработку строк.