Переменные полезны не только для хранения и переиспользования информации. Также они нужны, чтобы упрощать сложные вычисления. В этом уроке мы научимся делать это.
Допустим, нам нужно перевести евро в юани через доллары. Подобные конвертации через промежуточную валюту часто делают банки при покупках за рубежом.
Для начала переведем 50 евро в доллары. Допустим, один евро равен 1.25 доллара:
<?php
$dollarsCount = 50 * 1.25;
print_r($dollarsCount);
Ранее мы записывали в переменную конкретное значение. А здесь в $dollarsCount = 50 * 1.25;
справа от знака равно находится выражение. Интерпретатор вычислит результат — 62.5
— и запишет его в переменную.
Для интерпретатора неважно, что перед ним: 62.5
или 50 * 1.25
. Для него оба варианта — выражения, которые надо вычислить. И они вычисляются в одно и то же значение — 62.5
.
Любая строка — это выражение. Конкатенация строк — тоже выражение. Когда интерпретатор видит выражение, он обрабатывает его и генерирует результат — значение выражения.
Вот несколько примеров выражений, а в комментариях справа от каждого выражения — итоговое значение:
<?php
62.5 // 62.5
50 * 1.25 // 62.5
120 / 10 * 2 // 24
(int) '100' // 100
"hello" // "hello"
"Good" . "will" // "Goodwill"
Теперь запишем стоимость доллара в юанях как отдельную переменную. Вычислим цену 50 евро в долларах, умножив их на 1.25
. Допустим, что 1 доллар — 6.91 юаней:
<?php
$yuansPerDollar = 6.91;
$dollarsCount = 50 * 1.25; // 62.5
$yuansCount = $dollarsCount * $yuansPerDollar; // 431.875
print_r($yuansCount);
Любая переменная может быть частью любого выражения. В момент вычисления вместо имени переменной подставляется ее значение. Интерпретатор вычисляет значение $dollarsCount
до того, как эта переменная начнет использоваться в других выражениях. Когда подходит момент использования переменной, PHP знает значение, потому что уже вычислил его.
Использовать переменные можно и с конкатенацией. Синтаксически ничего не меняется: мы умеем конкатенировать (склеивать) две строки:
<?php
$what = "Kings" . "road";
print_r($what); // => "Kingsroad"
// Конкатенируем строку и переменную, в которой записана строка
$first = "Kings";
$what = $first . "road";
print_r($what); // => "Kingsroad"
// Конкатенируем две переменные, в которых записаны строки
$last = 'road';
$what = $first . $last;
print_r($what); // => "Kingsroad"
Напишите программу, которая берёт исходное количество евро из переменной $eurosCount
, переводит евро в доллары и выводит значение на экран. Затем программа полученное значение переводит в юани и выводит результат на новой строчке.
Пример вывода для 100 евро:
125
863.75
Считаем, что:
Для перевода строчки можно использовать \n
между выводом долларов и юаней.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1<?php // phpcs:ignore PSR1.Files.SideEffects
2
3namespace HexletBasics\Variables\Expressions;
4
5use PHPUnit\Framework\TestCase;
6
7\HexletBasics\Functions\runScript();
8
9class Test extends TestCase
10{
11 public function test()
12 {
13 $expected = "125\n863.75";
14 $this->expectOutputString($expected);
15 require 'index.php';
16 }
17}
18
Решение учителя откроется через: