Архіви позначок: echo

Рядки в одинарних і подвійних апострофах

Поширте інформацію:

Рядок, обрамлений одинарними апострофами (наприклад, ‘сало’), трактується точно так, як записаний, за винятком двох спеціальних послідовностей символів:

  • послідовність \’ трактується як апостроф і призначена для вставки апострофа в рядок, обрамлений апострофами
  • послідовність \\ трактується як один зворотний слеш і дозволяє вставляти слеші в рядок

Решта символів позначають самі себе, зокрема символ $ не має ніякого спеціального значення, отже, змінні всередині рядка, обрамленого апострофами, не інтерполюються (їх значення не підставляється).

Рядок же, обрамлений лапками (“подвійними апострофами”), має значно багатший набір спеціальних мета-символів. Деякі з них:

  • \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"; // третій спосіб

Як бачимо, фігурні дужки в деяких контекстах також можуть трактуватися як спецсиволи.