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

Вы, наверное, заметили, что php-строка обозначается то одинарными, то двойными кавычками. Дело в том, что всё, что находится в одинарных кавычках, интерпретируется просто как последовательность символов, как текст.

Если же php-строка обозначается двойными кавычками, то вместо переменных будут выводиться значения этих переменных. Поэтому если в строке есть переменные, то в качестве внешних кавычек лучше применять двойные кавычки.

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

$weight='bold';
echo "<div style='font-weight:$weight'>";

  • Третий уровень кавычек

    Если внутри одинарных кавычек нужны вложенные кавычки, то придется использовать двойные, но они уже заняты. Если двойные (или одинарные) кавычки нужно отображать как символы, то предваряйте их обратным слешем, как в следующем примере, для трех строковых параметров JavaScript функции window.open():

    <?php echo "
    <a href=''
    onclick='
        window.open(\"$url\",\"\",\"width=$width,height=$height\");
        return false;
    '
    >blox.ru</a>
    " ?>
    

    Впрочем, можно избавиться от одного уровня кавычек, перейдя на альтернативный синтаксис php-кода.
    <a href=''
    onclick='
        window.open("<?= $url ?>","","width=<?= $width ?>,height=<?= $height ?>");
        return false;
    '
    >blox.ru</a>
    

  • Атрибуты – в двойных кавычках

    Если посмотреть на html-код странички, сгенерированной из шаблонов предлагаемым способом, то в коде вы увидите одни одинарные кавычки. Однако, классическим считается применение двойных кавычек. В канонической форме XML значений атрибута могут обрамляться только двойными кавычками.

    Чтобы вернуться к двойным кавычкам для атрибутов, есть два выхода.

    1. Первый способ – экранировать двойные кавычки в атрибутах обратным слешем:
      echo "<a href=\"?page=$dat[1]\">$dat[2]</a>";

    2. Второй способ – применять одинарные кавычки снаружи. PHP-переменные, оказавшись внутри одинарных кавычек, перестанут работать, поэтому их нужно вставлять с помощью оператора конкатенации (соединения). Таким образом, куски строк, состоящие только из символов будут заключены в одинарные кавычки:
      echo '<a href="?page='.$dat[1].'">'.$dat[2].'</a>';

      Когда используется только одна переменная, то код с использованием одинарных кавычек и оператора конкатенации выполняется быстрее, чем код с двойными кавычками, обрамляющими весь тестируемый фрагмент, на 10-15% . Однако, если вставляются три и более переменных, то способ "Одинарные кавычки + конкатенация" выполняется, наоборот, медленнее. Например, если сто переменных перемежаются со ста символьными строками, время выполнения кода становится на 50% больше!

    3. Третий способ – применять альтернативный синтаксис php-кода.
      <a href="?page=<?= $dat[1] ?>"><?= $dat[2] ?></a>
      Начиная с версии PHP 5.4, короткий тег вывода <?= распознается всегда, и можно писать так:
      <a href="?page=<?=$dat[1]?>"><?=$dat[2]?></a>
  • Именно двойные кавычки в атрибутах нужно использовать в окне редактирования на сайте при редактировании текстовых данных в html-режиме. Это нужно делать из-за того, что весь код, отредактированный в окне редактирования, перед вставкой в базу данных будет обрамлен одинарными кавычками.
  • Вычисление на лету

    Оператор конкатенации может оказаться полезным еще в одном случае, а именно, при вычислении значения функции прямо в строке. Например:

    # Сначала вычисляем переменную, затем вставляем:
    $aa = strip_tags($dat[2]);
    echo "<div><h3>$dat[1]</h3>$aa</div>";
    
    
    # Вставляем, вычисляя на лету:
    echo "<div><h3>$dat[1]</h3>".strip_tags($dat[2])."</div>";
    

    С помощью оператора конкатенации можно вставлять не только значения функций, но и результаты арифметических операций:

    $aa=4;
    $bb=3;
    
    echo "<div>".$aa*$bb."</div>";  // <div>12</div>
    echo "<div>".$aa/$bb."</div>";  // <div>1.333</div>
    echo "<div>".$aa%$bb."</div>";  // <div>1</div>
    echo "<div>".($aa+$bb)."</div>";// <div>7</div>
    echo "<div>".($aa-$bb)."</div>";// <div>1</div>
    echo "<div>".(-$aa)."</div>";   // <div>-4</div>
    

  • Esc-последовательности

    Esc-последовательности, или управляющие последовательности, состоят из обратной, косой черты (\), за которой следует буква или комбинация цифр. В них символ обратной косой черты рассматривается как символ, изменяющий значение буквы. Они вместе являются одним целым и выполняют определенное действие при выводе на устройство отображения, например, переход на новую строку (\п) или табуляцию (\t).

    Esc-последовательности нужно заключать в двойные кавычки, esc-последовательности , заключенные в одинарные кавычки интерпретируются просто как символы.

    
    echo "\n".'<div class="content">'.$dat[2].'</div>';
    // или
    echo "\n<div class='content'>$dat[2]</div>";
    
    

По стандартам XHTML значения атрибутов, даже числовые, должны быть заключены в кавычки. Разрешены как двойные, так и одинарные кавычки.

Вы должны только определиться, какой стиль вам больше подходит. Если вы – за чистоту кода страницы, применяйте в атрибутах двойные кавычки. Если вам важнее удобство кодирования, пишите в атрибутах одинарные кавычки, к тому же, одинарная кавычка, в отличие от двойной, пишется с помощью одной клавиши.