Присваивание с конкатенацией: оператор .= в языке PHP

Раздел: Основы PHP -> Операторы PHP

Оператор присваивания с конкатенацией в PHP

Наиболее эффективным способом добавления строки к уже существующей переменной является оператор .= (точка равно). Он объединяет оператор присваивания и конкатенации, считывая текущее значение переменной, присоединяя к нему новую строку и тут же сохраняя результат обратно в ту же переменную. Это избавляет от необходимости явно указывать переменную дважды.

Пример использования:

$greeting = 'Привет';
$greeting .= ', мир!';
echo $greeting; // Выведет 'Привет, мир!'

точка равно в php (оператор присваивания с конкатенацией в php)

На каждом шаге .= уменьшает количество операций присваивания и делает код более компактным и читаемым. Он используется в циклах при формировании длинных строк, в шаблонизаторах и при построении SQL-запросов.

Типичная ошибка:

Забыть поставить точку перед равно (написать = вместо .=) - тогда переменная будет перезаписана, а не дополнена. Решение: всегда использовать .= при накоплении строки.

Как добавить строку к переменной с помощью конкатенации и последующего присваивания?

Классический способ: $var = $var . 'новая часть';. Он полностью эквивалентен оператору .=, но требует повторного упоминания переменной. Подходит, если нужно не только присвоить, но и использовать промежуточное значение.

$name = 'Код';
$name = $name . ' PHP';
echo $name; // 'Код PHP'

Проблема:

При большом количестве операций такой код становится громоздким и может скрыть логику. Решение: применять .= для краткости.

Цель: явное разделение конкатенации и присваивания для большей наглядности в простых сценариях.

Как накопить строку из элементов массива с использованием присваивания и конкатенации?

Если нужно собрать строку из частей, хранящихся в массиве, удобно применить цикл с оператором .= или функцию implode(). Второй вариант предпочтительнее по производительности и читаемости.

$parts = ['PHP', ' это', ' просто'];
$result = '';
foreach ($parts as $part) {
    $result .= $part;
}
echo $result; // 'PHP это просто'

// Альтернатива без цикла:
$result2 = implode('', $parts);
echo $result2; // 'PHP это просто'

Ошибка:

Забыть инициализировать переменную $result пустой строкой - тогда при первой конкатенации может возникнуть предупреждение о неопределённой переменной. Решение: всегда присваивать начальное значение.

Для больших массивов цикл с .= менее эффективен, чем implode(), так как каждая итерация пересоздаёт строку.

Цель: сборка строки из коллекции элементов, когда порядок и содержание динамичны.

Как вставить переменные в строку с одновременным присваиванием результата?

Оператор .= можно комбинировать с синтаксисом интерполяции или с sprintf. Это позволяет добавлять форматированные фрагменты.

$user = 'admin';
$log = '';
$log .= "Пользователь: $user";
$log .= sprintf(" (уровень: %d)", 1);
echo $log; // 'Пользователь: admin (уровень: 1)'

Ошибка:

Использование одинарных кавычек для подстановки переменных - они не интерполируются. Решение: использовать двойные кавычки или sprintf.

Цель: динамическое формирование строк с подстановкой значений, когда части создаются по мере выполнения кода.

Расширенные примеры с оператором .

Пример 1. Построение многострочного текста в цикле

Пример
$items = ['Яблоко', 'Груша', 'Слива'];
$list = '';
foreach ($items as $item) {
    $list .= "- $item\n";
}
echo $list;
- Яблоко
- Груша
- Слива

Пояснение: на каждой итерации к строке добавляется новая строка с элементом и символом новой строки. Начальное значение - пустая строка для предотвращения ошибки.

Пример 2. Использование . = с heredoc для формирования HTML-шаблона

Пример
$title = 'Страница';
$body = 'Содержимое';
$html = '';
$html .= <<
<!DOCTYPE html>
<html>
<head><title>Страница</title></head>
<body><p>Содержимое</p></body>
</html>

Пояснение: heredoc позволяет сохранить форматирование и интерполировать переменные. Оператор . = присоединяет результат heredoc к переменной. Важно: heredoc не должен содержать пробелов после закрывающего идентификатора.

Пример 3. Конкатенация с преобразованием типов

Пример
$count = 5;
$message = 'Всего: ';
$message .= $count; // автоматически преобразуется в строку
echo $message; // 'Всего: 5'

$price = 19.99;
$message2 = 'Цена: ';
$message2 .= $price;
echo $message2; // 'Цена: 19.99'
Всего: 5
Цена: 19.99

Пояснение: PHP автоматически приводит числа к строкам при конкатенации. Если же нужно явно контролировать формат, лучше использовать sprintf или number_format.

Пример 4. Накопление SQL-запроса с условиями

Пример
$query = 'SELECT * FROM users WHERE 1=1';
if (!empty($name)) {
    $query .= " AND name = '$name'";
}
if (!empty($age)) {
    $query .= " AND age = $age";
}
echo $query;
SELECT * FROM users WHERE 1=1 AND name = 'Анна' AND age = 25

Пояснение: оператор . = удобен для динамического построения запросов. Важна осторожность с SQL-инъекциями - в реальных проектах нужно использовать подготовленные выражения.

Пример 5. Комбинирование . = с тернарным оператором

Пример
$status = 'активен';
$output = 'Пользователь: ';
$output .= ($status === 'активен') ? 'онлайн' : 'офлайн';
echo $output; // 'Пользователь: онлайн'
Пользователь: онлайн

Пояснение: выражение справа от . = может быть любым, результат которого приводится к строке.

Пример 6. Использование . = для построения JSON-строки (без json_encode)

Пример
$data = ['key' => 'value', 'num' => 42];
$json = '{';
foreach ($data as $k => $v) {
    $json .= "\"$k\":\"$v\",";
}
$json = rtrim($json, ',') . '}';
echo $json; // {"key":"value","num":"42"}
{"key":"value","num":"42"}

Пояснение: демонстрация ручного построения, хотя на практике следует использовать json_encode. Здесь . = добавляет каждую пару, затем удаляется лишняя запятая.

Оператор присваивания с конкатенацией в PHP - comments

En
точка равно в php (php)