Как известно, PHP позволяет использовать в качестве символа, обозначающего строку как двойную («), так и одинарную (‘) кавычку. Принципиальной разницей между этими символами является то, как их обрабатывает интерпретатор.
Внутри строк, обозначенных двойными кавычками, он используя регулярные выражения, пытается найти переменные, чтобы заменить их на значения. Если такой переменной не существует вместо неё будет использована пустая строка. Строки, обозначенные одинарной кавычкой анализу не подвергаются. В качестве примера:
$price = 15;
$result1 = $result2 = '';
for($count = 0; $count < 10; $count++)
{
$amount = $count * $price;
$result1 .= "Count = $count and amount = $amount<br/>";
$result2 .= 'Count = $count and amount = $amount<br/>';
}
echo $result1;
echo '<br/><br/>';
echo $result2;
Соответственно в первом случае на вывод пойдет строка вида: Count = 1 and amount = 15, а во втором: Count = $count and amount = $amount.
Для эквивалентного вывода в случае строк с одинарными кавычками необходимо воспользоваться конкатенацией:
$result2 .= 'Count = '.$count.' and amount = '.$amount.'<br/>';
Альтернативой является использование встроенной функцией sprintf:
$result4 .= sprintf('Count = %d and amount = %d<br/>', $count, $amount);
К сожалению, весьма часто встречаются ситуации, когда все строки в коде заключены в двойные кавычки, вне зависимости от наличия или отсутствия переменных в них. А значит ресурсы веб-сервера на их анализ тратятся впустую.
Встаёт вопрос, какой из трёх способов вывода строк работает быстрее всего? Опыт показывает, что для наибольшей производительностью обладает конкатенация строк помеченных одиночными кавычками с переменными. Использования sprintf представляет собой баланс между скоростью работы и качеством кода. Как правило я использую именно её. Заключать строки в двойные кавычки ради вывода переменных я бы не рекомендовал.