Рядок, обрамлений одинарними апострофами (наприклад, ‘сало’), трактується точно так, як записаний, за винятком двох спеціальних послідовностей символів:
- послідовність \’ трактується як апостроф і призначена для вставки апострофа в рядок, обрамлений апострофами
- послідовність \\ трактується як один зворотний слеш і дозволяє вставляти слеші в рядок
Решта символів позначають самі себе, зокрема символ $ не має ніякого спеціального значення, отже, змінні всередині рядка, обрамленого апострофами, не інтерполюються (їх значення не підставляється).
Рядок же, обрамлений лапками (“подвійними апострофами”), має значно багатший набір спеціальних мета-символів. Деякі з них:
- \n позначає символ нового рядка
- \r позначає символ повернення каретки
- \t позначає символ табуляції
- \$ позначає символ $, щоб, текст, який іде за ним, випадково не інтерполювався, як змінна
- \” позначає лапки
- \\ позначає зворотний слеш
- \xNN позначає символ, шістнадцятковий код якого дорівнює NN
Змінні в рядках, обрамлених лапками, інтерполюються. Наприклад:
$a = "Hello";
echo "$a World!";
Цей код виведе Hello world!, тобто змінна $a в рядку була інтерпольована (замінена на своє значення).
Ще приклад:
$a = "Hell"; // слово Hello без букви o
echo "$ao world!";
Як ви думаєте, буде виведено той самий рядок? А як PHP дізнається, мали ми на увазі змінну $a, чи змінну $ao ? Очевидно, ніяк. Цей код генерує повідомлення про те, що змінна $ao не визначена. Як вирішити проблему? Є аж три способи:
$a = "Hell"; // слово Hello без букви o
echo $a."o world!"; // перший спосіб
echo "{$a}o world!"; // другий спосіб
echo "${a}o world"; // третій спосіб
Як бачимо, фігурні дужки в деяких контекстах також можуть трактуватися як спецсиволи.