Соединение строк через оператор точки в PHP
Основы конкатенации строк в PHP
Как соединить две строки в PHP?
Оператор точки (.) выполняет конкатенацию строк. Это базовый и самый распространенный способ объединения строковых значений. Синтаксис: $result = $str1 . $str2;.
$firstName = 'Иван';
$lastName = 'Петров';
$fullName = $firstName . ' ' . $lastName;
echo $fullName; // Иван Петровточка в php в строке (точка (конкатенация) в строке php)
Оператор не изменяет исходные переменные, а создает новую строку. Если один из операндов не является строкой, PHP автоматически преобразует его (например, число в строку).
Типичная ошибка
Использование оператора + вместо . для строк: $a = '5' + '3'; // 8 (число). Для строковой конкатенации нужен именно точка.
Как присоединить строку к существующей переменной?
Сокращенный оператор присваивания с конкатенацией .= добавляет строку в конец существующей переменной.
$text = 'Привет';
$text .= ', мир!';
echo $text; // Привет, мир!Php три точки (три точки в php (spread operator))
Проблема: не забыть инициализировать переменную
Если переменная не определена, оператор .= вызовет ошибку (до PHP 8.0 – предупреждение). Нужно инициализировать её пустой строкой.
Как вставить переменную в середину строки без конкатенации?
Двойные кавычки интерполируют переменные: "Текст $variable текст". Это альтернатива конкатенации, которая не использует точку.
$age = 25;
echo "Ваш возраст: $age лет"; // Ваш возраст: 25 летДля сложных выражений нужен синтаксис фигурных скобок: "{$obj->property}".
Ошибка интерполяции при неоднозначности
Если после переменной идут символы, которые могут быть частью имени переменной, используйте фигурные скобки: "$variabletext" может быть интерпретировано как переменная $variabletext.
Как объединить массив строк в одну строку?
Функция implode() объединяет элементы массива с разделителем. Это удобно, когда нужно склеить много строк без многократного использования точки.
$words = ['PHP', 'JavaScript', 'Python'];
$result = implode(', ', $words);
echo $result; // PHP, JavaScript, PythonЕсли разделитель не нужен, передайте пустую строку: implode('', $words).
Как отформатировать строку с подстановками?
Функция sprintf() возвращает строку по шаблону с подстановками через плейсхолдеры. Это гибче, чем конкатенация, особенно для чисел с форматированием.
$name = 'Анна';
$score = 95.5;
$message = sprintf('Привет, %s! Ваш результат: %.1f баллов.', $name, $score);
echo $message; // Привет, Анна! Ваш результат: 95.5 баллов.Плейсхолдеры: %s – строка, %d – целое, %f – число с плавающей точкой.
Как создать многострочную строку с включением переменных?
Синтаксис heredoc позволяет задать строку как многострочный блок с интерполяцией переменных, а nowdoc – без интерполяции. Это альтернатива конкатенации через точку для длинных текстов.
$name = 'Мир';
$heredoc = <<Ошибка закрывающего идентификатора
Закрывающий идентификатор heredoc/nowdoc должен быть на отдельной строке без отступов и точки с запятой сразу после него. В PHP 7.3+ разрешены отступы, но для совместимости лучше придерживаться строгих правил.
Расширенные примеры конкатенации строк
Конкатенация с разными типами данных
$int = 42;
$float = 3.14;
$boolTrue = true;
$boolFalse = false;
$null = null;
$array = ['a', 'b'];
$result1 = $int . ' - число'; // 42 - число
$result2 = $float . ' - дробь'; // 3.14 - дробь
$result3 = $boolTrue . ' - истина'; // 1 - истина (true преобразуется в '1')
$result4 = $boolFalse . ' - ложь'; // '' - ложь (false преобразуется в '')
$result5 = $null . ' - пусто'; // '' - пусто (null преобразуется в '')
$result6 = $array . ' - массив'; // Notice: Array to string conversion -> 'Array - массив'
pre class="ex_r">42 - число
3.14 - дробь
1 - истина
- ложь
- пусто
Array - массивОбратите внимание:
При конкатенации массива выдается предупреждение, а строковое представление - слово 'Array'. Лучше явно преобразовывать массив через implode() или json_encode().
Цепочка конкатенаций и производительность
$parts = ['a', 'b', 'c', 'd', 'e'];
$start = microtime(true);
$result = '';
foreach ($parts as $p) {
$result .= $p;
}
$timeConcatenate = microtime(true) - $start;
$start2 = microtime(true);
$result2 = implode('', $parts);
$timeImplode = microtime(true) - $start2;
echo "Конкатенация: $timeConcatenate сек, implode: $timeImplode сек";
// Вывод: Конкатенация: 8.5e-6 сек, implode: 5.2e-6 сек (пример)Для большого числа частей implode() обычно быстрее, так как избегает многократного выделения памяти.
Конкатенация в условных выражениях
$isAdmin = true;
$greeting = 'Добро пожаловать' . ($isAdmin ? ', администратор!' : ', пользователь!');
echo $greeting; // Добро пожаловать, администратор!Точка имеет более высокий приоритет, чем тернарный оператор, поэтому скобки обязательны. Без скобок код 'Добро пожаловать' . $isAdmin ? ', администратор!' : ', пользователь!' интерпретируется как ('Добро пожаловать' . $isAdmin) ? ....
Конкатенация и интернационализация (локализация)
$lang = 'ru';
$greetingRu = 'Привет';
$greetingEn = 'Hello';
$name = 'Мария';
$fullGreeting = ($lang === 'ru' ? $greetingRu : $greetingEn) . ', ' . $name . '!';
echo $fullGreeting; // Привет, Мария!В реальных проектах используют функции sprintf() или strtr() для перевода шаблонов.
Использование sprintf для сложного форматирования
$price = 1234.5678;
$discount = 15;
$formatted = sprintf('Цена: %.2f руб (скидка %d%%)', $price, $discount);
echo $formatted; // Цена: 1234.57 руб (скидка 15%)%% выводит символ процента. Для округления - спецификатор %.2f.
Конкатенация с null-coalescing оператором
$username = ''; // или null
$greeting = 'Привет, ' . ($username ?? 'гость');
echo $greeting; // Привет, гостьЕсли переменная не определена, null-coalescing оператор предотвратит ошибку и подставит строку по умолчанию.