PHP: Переменные и конкатенация
Ранее мы уже склеивали строки напрямую, используя конкатенацию. Теперь сделаем то же самое, но с использованием переменных. Хорошая новость: синтаксис остается тем же. Просто подставляются значения переменных.
Склеиваем две строки напрямую
<?php
$what = 'Kings' . 'road';
print_r($what); // => KingsroadЗдесь все просто: две строки соединяются в одну. Так работает конкатенация: оператор . складывает строки, создавая новую строку.
Склеиваем строку и переменную
Если в переменной $first лежит строка "Kings", мы можем спокойно склеить ее с другой строкой:
<?php
$first = 'Kings';
$what = $first . 'road';
print_r($what); // => KingsroadPHP подставит значение переменной, выполнит операцию и создаст итоговую строку.
Склеиваем две переменные
Точно так же можно объединить значения двух переменных, если обе содержат строки:
<?php
$first = 'Kings';
$last = 'road';
$what = $first . $last;
print_r($what); // => KingsroadМожно добавлять и пробелы:
$full = $first . ' ' . $last;
print_r($full); // => Kings road$first = 'Kings'
$last = 'road'
$first . ' ' . $last
└─┬──┘ └──┬─┘
'Kings' . ' ' . 'road'
└─────────┬────────────┘
'Kings road'А что если переменная содержит число?
Попробуем так:
<?php
$age = 42;
print_r('Age: ' . $age); // => Age: 42В PHP такой код работает: оператор . всегда склеивает строки, поэтому число автоматически преобразуется в строку. Не во всех языках так — например, в Python склеивание строки и числа приводит к ошибке, и число приходится преобразовывать явно.
То же самое касается переменных с результатами вычислений:
<?php
$price = 50 * 1.25 * 6.91; // => 431.875
print_r('Price in yuans: ' . $price); // => Price in yuans: 431.875Автоматическое преобразование удобно, но требует внимательности: иногда в строку превращается не то, что вы ожидали. Подробнее о таком поведении мы поговорим в уроках про типы данных.
Задание
Интернет-магазин отправляет покупателю письмо после оформления заказа. Письмо генерируется автоматически на основе данных о клиенте.
Напишите программу, которая генерирует приветствие и тело письма, используя уже готовые переменные, и выводит строки на экран.
Для приветствия используйте переменные $firstName и $greeting, запятую и восклицательный знак. Для тела письма используйте переменные $intro и $info — второе предложение должно быть на новой строке.
Результат на экране:
Здравствуйте, Анна!
Спасибо за ваш заказ.
Ожидаемая дата доставки — 3 рабочих дня.Выполните задание, используя только два print_r(). Не забудьте, что print_r() не переводит строку сам — перенос \n нужно добавить в нужные места самостоятельно.
Полезное
Подумайте, с какой строкой и в каком порядке нужно склеивать переменные, чтобы получить такой двухстрочный вывод тела письма.
Помните, что можно создать строку, которая содержит только управляющую последовательность
\n. Вы можете конкатенировать эту строку с переменными для правильного форматирования текста.
PHP: Переменные и конкатенация
Ранее мы уже склеивали строки напрямую, используя конкатенацию. Теперь сделаем то же самое, но с использованием переменных. Хорошая новость: синтаксис остается тем же. Просто подставляются значения переменных.
Склеиваем две строки напрямую
<?php
$what = 'Kings' . 'road';
print_r($what); // => KingsroadЗдесь все просто: две строки соединяются в одну. Так работает конкатенация: оператор . складывает строки, создавая новую строку.
Склеиваем строку и переменную
Если в переменной $first лежит строка "Kings", мы можем спокойно склеить ее с другой строкой:
<?php
$first = 'Kings';
$what = $first . 'road';
print_r($what); // => KingsroadPHP подставит значение переменной, выполнит операцию и создаст итоговую строку.
Склеиваем две переменные
Точно так же можно объединить значения двух переменных, если обе содержат строки:
<?php
$first = 'Kings';
$last = 'road';
$what = $first . $last;
print_r($what); // => KingsroadМожно добавлять и пробелы:
$full = $first . ' ' . $last;
print_r($full); // => Kings road$first = 'Kings'
$last = 'road'
$first . ' ' . $last
└─┬──┘ └──┬─┘
'Kings' . ' ' . 'road'
└─────────┬────────────┘
'Kings road'А что если переменная содержит число?
Попробуем так:
<?php
$age = 42;
print_r('Age: ' . $age); // => Age: 42В PHP такой код работает: оператор . всегда склеивает строки, поэтому число автоматически преобразуется в строку. Не во всех языках так — например, в Python склеивание строки и числа приводит к ошибке, и число приходится преобразовывать явно.
То же самое касается переменных с результатами вычислений:
<?php
$price = 50 * 1.25 * 6.91; // => 431.875
print_r('Price in yuans: ' . $price); // => Price in yuans: 431.875Автоматическое преобразование удобно, но требует внимательности: иногда в строку превращается не то, что вы ожидали. Подробнее о таком поведении мы поговорим в уроках про типы данных.
Задание
Интернет-магазин отправляет покупателю письмо после оформления заказа. Письмо генерируется автоматически на основе данных о клиенте.
Напишите программу, которая генерирует приветствие и тело письма, используя уже готовые переменные, и выводит строки на экран.
Для приветствия используйте переменные $firstName и $greeting, запятую и восклицательный знак. Для тела письма используйте переменные $intro и $info — второе предложение должно быть на новой строке.
Результат на экране:
Здравствуйте, Анна!
Спасибо за ваш заказ.
Ожидаемая дата доставки — 3 рабочих дня.Выполните задание, используя только два print_r(). Не забудьте, что print_r() не переводит строку сам — перенос \n нужно добавить в нужные места самостоятельно.
Полезное
Подумайте, с какой строкой и в каком порядке нужно склеивать переменные, чтобы получить такой двухстрочный вывод тела письма.
Помните, что можно создать строку, которая содержит только управляющую последовательность
\n. Вы можете конкатенировать эту строку с переменными для правильного форматирования текста.
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Variables\Concatenation;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = <<<HERE
Здравствуйте, Анна!
Спасибо за ваш заказ.
Ожидаемая дата доставки — 3 рабочих дня.
HERE;
$this->assertOutput($expected);
}
}Решение учителя откроется через:
20:00
