Аргументы как выражения

Рассмотрим код из предыдущего урока:

<?php

$result = round(10.25); // 10

Функция round вызывается с аргументом 10.25.

Мы выяснили, что выражения превращаются в значения. То есть с точки зрения PHP значения и выражения — это что-то схожее. Поэтому любые значения в программе технически можно заменить выражениями.

При вызове функции можно передать в неё аргументом выражение:

<?php

$result = round(8 + 2.25); // 10

Результат будет таким же, как в первом примере, потому что выражение 8 + 2.25 превратится в значение 10.25, и с таким аргументом произойдет вызов round.

Более того, можно использовать переменные вперемешку со значениями и другими выражениями:

<?php

$number = 1.25;

$result = round($number + 7 + 2); // 10

Естественно, это работает не только с числами, а с любыми значениями и выражениями. Например, со строками.

Напомним, что в составе PHP есть функция ucfirst, которая принимает строку и возвращает на её основе новую строку, где первая буква превращена в заглавную. Вот простой вызов:

<?php

$result = ucfirst('dragon'); // 'Dragon'

А вот вызов, где в качестве единственного аргумента идёт целое выражение:

<?php

$result = ucfirst('dra' . 'gon'); // 'Dragon'

Результат будет тем же: в $result запишется строка 'Dragon', потому что выражение 'dra' . 'gon' превратится в значение 'dragon', и с таким аргументом произойдет вызов ucfirst.

Давайте подытожим. Взгляните на несколько примеров из текущего урока:

<?php

// простые вызовы
$result = round(10.25);           // 10
$result = ucfirst('dragon');      // 'Dragon'

// выражения в аргументах
$result = round(8 + 2.25);        // 10
$result = ucfirst('dra' . 'gon'); // 'Dragon'

// выражения с переменными в аргументах
$number = 1.25;
$result = round($number + 7 + 2); // 10

$text = 'dr';
$result = ucfirst($text .  'ag' . 'on');  // 'Dragon'

Заметьте схожесть: во всех вызовах в функции передается какая-то информация, но иногда это простое, «готовое» значение (10.25, 'dragon'), а иногда составное выражение — «неготовое» значение (8 + 2.25, $number + 7 + 2, $text . 'ag' . 'on' и т.д.). При этом во всех примерах передаётся один аргумент. Когда аргументов несколько, они обязательно разделяются запятыми.

Задание

Вам доступна функция calculateDistanceBetweenTowns. Она принимает один аргумент, в котором должны содержаться названия двух городов через дефис. В ответ она возвращает расстояние между этими городами. Вот пример использования:

<?php

$distance = calculateDistanceBetweenTowns('Lannisport-Bayasabhad');

Напишите программу, которая использует функцию calculateDistanceBetweenTowns и выводит на экран расстояние между городами, записанными в переменные $from и $to.

Упражнение доступно только авторизованным пользователям.

Пожалуйста, авторизуйтесь с помощью учётной записи GitHub, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт на GitHub.