Возврат значений

В модуле «Вызов функций» мы в основном работали с функциями, которые возвращают результат, а не выводят его на экран. Честно говоря, вывод на экран — фактически обучающий элемент. В реальном коде на экран никто ничего не выводит (за исключением утилит командной строки). Функции возвращают данные, которые потребляются другими функциями.

Научиться писать функции, которые возвращают информацию — первый шаг на пути к построению по-настоящему полезных программ.

Начнем с тривиального примера: создадим и вызовем функцию, которая принимает два числа и возвращает первое число минус второе. Назовём её sub, от англ. “subtract” — «вычесть»:

<?php

function sub($a, $b)
{
  $result = $a - $b;
  return $result;
}

print_r(sub(10, 7));
3

Обратите внимание: мы знаем, что вызов функции — выражение, поэтому мы передали вызов одной функции в вызов другой функции — print_r(sub(10, 7)).

Возврат задаётся специальной инструкцией return. Cправа от return помещается выражение. Любое выражение. То есть, мы можем делать вычисления сразу после return без создания переменной $result:

<?php

function sub($a, $b)
{
  return $a - $b;
}

print_r(sub(2018, 1975));
43

После исполнения функции возвращенный результат «встаёт» на место вызова:


Интерпретатор, встречая return, останавливает дальнейшее выполнение функции и возвращает указанное справа значение в то место, где была вызвана функция.

Посмотрите на эту функцию:

<?php

function foo()
{
  return 7;
  return 10;
}

print_r(foo());

Что выведется на экран?

Правильный ответ: 7. Функция всегда будет возвращать только число 7, так как интерпретатор, наткнувшись на первый return, остановит выполнение функции. Строчка кода return 10; никогда не выполнится.

Задание

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

Создайте функцию getParentNamesTotalLength для Сэма. Она должна принимать один аргумент — имя ребенка, и возвращать количество символов в именах матери и отца суммарно. Функция не должна выводить ничего на экран, только возвращать число.

Для реализации используйте уже существующие функции parentFor и strlen:

  • Получение имени матери parentFor($child, 'mother'), где $child — имя ребёнка.
  • Получение имени отца parentFor($child, 'father'), где $child — имя ребёнка
  • Получение длины строки: strlen($str), где $str — строка

Вам не нужно вызывать свою функцию, только определить её.

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

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