Одинарні лапки - рядок «як є». Змінні не підставляються, з екранувань працюють лише \' і \\.
'Привіт, $name\n'; // буквально: Привіт, $name\n
Подвійні лапки - з інтерполяцією змінних і екрануваннями (\n, \t, \u{1F600}, \$):
"Привіт, $name\n";
"Сума: {$order->total} грн"; // складні вирази - у фігурних дужках
"Перший: {$items[0]['title']}";
Heredoc - багаторядковий рядок з інтерполяцією, як подвійні лапки:
$html = <<<HTML
<p>Привіт, {$user->name}</p>
<p>Замовлень: {$count}</p>
HTML;
Nowdoc - багаторядковий без інтерполяції, як одинарні лапки (мітка в лапках):
$template = <<<'SQL'
SELECT * FROM users WHERE email = :email
SQL;
З PHP 7.3 закривальну мітку можна відступати - відступ прибирається з усіх рядків, що зручно для коду всередині класів.
Що варто знати:
- Інтерполяція
${name}застаріла з PHP 8.2 - лише{$name}. - Швидкодія однакова: історична порада «одинарні лапки швидші» сьогодні не має значення - рядки компілюються один раз і кешуються в OPcache.
- Виклики методів і функцій у рядку не працюють без змінної:
"{$user->name()}"- так,"{strtoupper($name)}"- ні. - Nowdoc зручний для SQL, шаблонів і регулярних виразів, де
$має бути буквальним. - Інтерполяція - не для HTML і SQL з даними користувача: екранування (
htmlspecialchars) і прив'язка параметрів обов'язкові незалежно від способу складання рядка.