Строки и кавычки в PHP

Александр Кичатов

Кавычки в PHP

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

<?php
    $name = 'Вася';

    echo 'Меня зовут $name'; // Меня зовут $name
    echo "Меня зовут $name"; // Меня зовут Вася

Как PHP определяет название переменной в строке

Название переменной должно содержать в себе только цифры, буквы и нижнее подчёркивание. PHP принимает за название переменной всё, что находится между символом $ и первым не подходящим символом.

В следующем коде PHP неправильно определит название переменной и выдаст ошибку:

<?php
    $price = 1499;
    echo "$priceруб";

Результат в браузере:

Notice: Undefined variable: priceруб in D:\OpenServer\domains\programulin.ru\index.php on line 3

Для корректного определения названия переменной нужно поместить её в фигурные скобки:

<?php
    $price = 1499;
    echo "{$price}руб"; // 1499руб

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

Дело в том, что двойные кавычки у многих вызывают ассоциацию "в эту строку что-то должно подставляться". Поэтому я рекомендую использовать одинарные кавычки для обычного текста, а двойные - только когда в текст нужно подставить переменную. Пример:

<?php
    $name = 'Вася';

    # Это обычная строка, поэтому используем одинарные кавычки:
    echo 'Хорошая погода!';

    # Здесь подставляется переменная, поэтому используем двойные кавычки:
    echo "Здравствуйте, $name!";
?>

Экранирование кавычек

Если вам нужно поместить кавычки внутрь строки, есть 2 способа это сделать:

<?php
    // 1. Просто пишите одни кавычки внутри других:
    echo 'Прачечная "Судный день" работает с 9:00';
    echo "Прачечная 'Судный день' работает с 9:00";

    // 2. Используйте обратный слеш \ для экранирования кавычек:
    echo 'Прачечная \'Судный день\' работает с 9:00';
    echo "Прачечная \"Судный день\" работает с 9:00";
?>

Во втором примере обратный слеш экранирует следующую за ним кавычку, чтобы PHP воспринял её как строку.

Как думаете, что нужно сделать, чтобы вывести на экран только обратный слеш? Ведь он будет экранировать закрывающую кавычку.

Для этого нужно написать второй слеш для экранирования первого:

<?php
    echo '\\'; // Выведет только один обратный слеш
?>

Табуляция и перенос строки

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

<?php
    $var1 = "Перенос строки: \n";
    $var2 = "Табуляция: \t";

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

<textarea>123<?= "\n456\t789" ?></textarea>

Задача 1

Напишите скрипт, который:
1. Создаёт переменную $type со значением Игра.
2. Создаёт переменную $name со значением "World of Warcraft" (с кавычками).
3. Выводит обе переменные внутри тега <h1>. Между переменными должен быть пробел.

<?php
    $type = 'Игра';
    $name = '"World of Warcraft"';
    echo "<h1>$type $name</h1>";

Задача 2

Выведите этот текст на экран, правильно используя кавычки и экранирование (если это необходимо):

То самое 'чувство', когда кончились слова и отключена "фантазия", да ещё и кавычек " ' " напихали.

<?php
    // Вариант 1
    echo 'То самое \'чувство\', когда кончились слова и отключена "фантазия", да ещё и кавычек " \' " напихали.<br>';

    // Вариант 2
    echo "То самое 'чувство', когда кончились слова и отключена \"фантазия\", да ещё и кавычек \" ' \" напихали.<br>";

    // Вариант 3
    echo "То самое 'чувство', когда кончились слова и отключена ",'"фантазия", да ещё и кавычек "', " ' ", '" напихали.<br>';

Комментарии