php Одинарные и двойные кавычки вокруг строк (литералов) -- какая разница. Когда и какие сиволы нужно экранировать

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

Строки с двойными и одинарными кавычками отличаются тем, что:

Экранирование символов в строках

Экранирование -- исключение "особого значения" символа с помощью добавления перед ним какого-либо иного символа.

Для экранирования спецсимволов в строках используется обратный слэш \.

Рассмотрим примеры вызовов echo() для разных литералов:


$a = 5; // присвоим переменной значение


echo('У Васи $a яблок типа "синап" '); /* -- можно ничего не экранировать, 
как как внешние кавычки одинарные и больше (кроме как на границах)
внутри строки они не встречаются. 
Значение переменной в литералах
в одинарными кавычками при выводе не экран не подставляется
(то есть $a выведется просто как текст)
Получим:

 У Васи $a яблок  типа "синап"
 */


echo('У Васи $a яблок типа \'синап\' '); /* -- тут мы вынуждены экранировать
 одинарные кавычки  внутри литерала, чтобы не получить ошибку, 
ведь если одинарные кавычки служат границами, то нужно как-то 
показывать, что внутри строки это не граница, а просто кавычка -- поэтому 
символ ' внутри строки в данным случае экранируется.
Получим:

 У Васи $a яблок  типа 'синап'
 */


echo("У Васи $a яблок типа 'синап' "); /* -- здесь можно ничего не экранировать,
кавычки снаружи двойные 
-- а потому одинарные смело можно использовать внутри строки, 
так как кавычки двойные, то значение переменной подставится вместо её имени.
Получим:

 У Васи 5 яблок  типа 'синап'
 */


echo("У Васи $a яблок типа \"синап\" "); /* -- экранируем то, 
что не является границей строки.
Значение переменной, опять же, подставляется.
Получим:

 У Васи 5 яблок  типа "синап"
 */


echo("У Васи \$a яблок типа \"синап\" "); /* -- экранируем знак доллара, 
чтобы он воспринимался как обычный символ 
-- в этом случае значение переменной не подставится.
Получим:

 У Васи $a яблок  типа "синап"
 */

Помимо знака доллара экранировать приходится и сам обратный слэш.