Пусть у нас есть функция, которая выводит на экран квадрат переданного числа:
<?php
function func($num) {
echo $num * $num;
}
func(3); // выведет 9
?>
Пусть мы хотим не выводить значение на экран, а записать в какую-нибудь переменную, вот так:
<?php
$result = func(3); // в переменной $result теперь 9
?>
Для этого в PHP существует специальная инструкция
return
, которая позволяет указать
значение, которое возвращает функция. Под
словом возвращает понимают то значение,
которое запишется в переменную, если ей присвоить
вызванную функцию.
Итак, давайте перепишем нашу функцию так, чтобы она не выводила результат на экран, а возвращала его в переменную:
<?php
function func($num) {
return $num * $num;
}
$result = func(3); // в переменной $result теперь 9
?>
После того, как данные записаны в переменную, их можно, например, вывести на экран:
<?php
function func($num) {
return $num * $num;
}
$result = func(3);
echo $result; // выведет 9
?>
А можно сначала как-то изменить эти данные, а затем вывести их на экран:
<?php
function func($num) {
return $num * $num;
}
$result = func(3);
$result = $result + 1;
echo $result; // выведет 10
?>
Можно сразу выполнять какие-то действия с результатом работы функции перед записью в переменную:
<?php
function func($num) {
return $num * $num;
}
$result = func(3) + 1;
echo $result; // выведет 10
?>
А можно не записывать результат в переменную, а сразу вывести его на экран:
<?php
function func($num) {
return $num * $num;
}
echo func(3); // выведет 9
?>
Сделайте функцию, которая параметром принимает
число, а возвращает куб этого числа. С помощью
этой функции найдите куб числа 3
и
запишите его в переменную $result
.
Использование функций в выражении
В следующем примере с помощью функции func
мы сначала найдем квадрат числа 2
,
а затем - квадрат числа 3
, сложим
эти значения и запишем в переменную:
<?php
function func($num) {
return $num * $num;
}
$result = func(2) + func(3);
echo $result; // выведет 13
?>
Сделайте функцию, которая параметром принимает
число, а возвращает квадратный корень из
этого числа. С помощью этой функции найдите
корень числа 3
, затем найдите корень
числа 4
. Просуммируйте полученные
результаты и выведите их на экран.
Функции в функциях
Можно также результат работы одной функции
передать параметром в другую, например, вот
так мы сначала найдем квадрат числа 2
,
а затем квадрат результата:
<?php
function func($num) {
return $num * $num;
}
$result = func(func(2));
echo $result; // выведет 16
?>
Функции, конечно же, не обязательно должны быть одинаковыми.
Пусть, например, у нас есть функция, возвращающая квадрат числа, и функция, возвращающая куб числа:
<?php
function square($num) {
return $num * $num;
}
function cube($num) {
return $num * $num * $num;
}
?>
Давайте с помощью этих функций возведем число
2
в квадрат, а затем результат этой
операции возведем в куб:
<?php
$result = cube(square(2));
echo $result;
?>
Пусть теперь у нас есть функция, возвращающая квадрат числа, и функция, находящая сумму двух чисел:
<?php
function square($num) {
return $num * $num;
}
function sum($num1, $num2) {
return $num1 + $num2;
}
?>
Найдем с помощью этих функций сумму квадрата
числа 2
и сумму квадрата числа 3
:
<?php
$result = sum(square(2), square(3));
echo $result;
?>
Тонкое место return
После того, как выполнится инструкция return
- функция закончит свою работу. То есть:
после выполнения return больше никакой
код не выполнится.
Смотрите пример:
<?php
function func($num) {
return $num * $num;
echo '!'; // этот код никогда не выполнится
}
$result = func(3);
?>
Это не значит, что в функции должен быть
один return
. Но выполнится только
один из них.
В следующем примере в зависимости от значения
параметра выполнится либо первый, либо второй
return
:
<?php
function func($num) {
if ($num >= 0) {
return '+';
} else {
return '-';
}
}
echo func( 3); // выведет '+'
echo func(-3); // выведет '-'
?>
Что выведется на экран в результате выполнения следующего кода:
<?php
function func($num) {
return $num;
$result = $num * $num;
return $result;
}
echo func(3);
?>
Объясните почему.
Что выведет каждый из echo
в результате
выполнения следующего кода:
<?php
function func($num) {
if ($num <= 0) {
return abs($num);
} else {
return $num * $num;
}
}
echo func(10);
echo func(-5);
?>
Объясните почему.
Что выведет каждый из echo
в результате
выполнения следующего кода:
<?php
function func($num) {
if ($num <= 0) {
return abs($num);
}
return $num * $num;
}
echo func(10);
echo func(-5);
?>
Объясните почему.
Цикл и return
Пусть у нас есть функция, возвращающая сумму
чисел от 1
до 5
:
<?php
function func() {
$sum = 0;
for ($i = 1; $i <= 5; $i++) {
$sum += $i;
}
return $sum;
}
$result = func();
echo $result; // выведет 15
?>
Пусть теперь мы расположим return
внутри цикла, вот так:
<?php
function func() {
$sum = 0;
for ($i = 1; $i <= 5; $i++) {
$sum += $i;
return $sum;
}
}
$result = func();
echo $result;
?>
В этом случае цикл прокрутится лишь одну
итерацию и произойдет автоматический выход
из функции (ну и заодно из цикла). А за одну
итерацию цикла в переменной $sum
окажется
лишь число 1
, а не вся нужная сумма.
Что выведется на экран в результате выполнения следующего кода:
<?php
function func($num) {
$sum = 0;
for ($i = 1; $i <= $num; $i++) {
$sum += $i;
return $sum;
}
}
echo func(5);
?>
Объясните почему.
Что хотел сделать автор данного кода? Исправьте ошибку автора.
Применение return в цикле
То, что return
расположен внутри цикла,
не всегда может быть ошибкой.
В следующем примере сделана функция, которая
определяет, сколько первых элементов массива
нужно сложить, чтобы сумма стала больше или
равна 10
:
<?php
function func($arr) {
$length = count($arr);
$sum = 0;
for ($i = 0; $i < $length; $i++) {
$sum += $arr[$i];
// Если сумма больше или равна 10:
if ($sum >= 10) {
return $i + 1; // выходим из цикла и из функции
}
}
}
$result = func([1, 2, 3, 4, 5]);
echo $result;
?>
А в следующем примере сделана функция, которая
вычисляет, сколько целых чисел, начиная с
1
, нужно сложить, чтобы результат
был больше 100
:
<?php
function func() {
$sum = 0;
$i = 1;
while (true) { // бесконечный цикл
$sum += $i;
if ($sum >= 100) {
return $i; // цикл крутится пока не выйдет тут
}
$i++;
}
}
echo func( );
?>
Напишите функцию, которая параметром будет
принимать число и делить его на 2
столько раз, пока результат не станет меньше
10
. Пусть функция возвращает количество
итераций, которое потребовалось для достижения
результата.
Приемы работы с return
Существуют некоторые приемы работы с return
,
упрощающие код.
Рассмотрим, к примеру, следующий код:
<?php
function func($num) {
if ($num >= 0) {
$result = sqrt($num);
} else {
$result = 0;
}
return $result;
}
echo func(3);
?>
Как вы видите, в данном коде в зависимости
от условия в переменную $result
будет
попадать либо одно, либо другое значение.
А последней строкой функции содержимое этой
переменной возвращается через return
.
Давайте перепишем этот код в более сокращенной
форме, избавившись от ненужной здесь переменной
$result
:
<?php
function func($num) {
if ($num >= 0) {
return sqrt($num);
} else {
return 0;
}
}
echo func(3);
?>
Дана следующая функция:
<?php
function func($num1, $num2) {
if ($num1 > 0 and $num2 > 0) {
$result = $num1 * $num2;
} else {
$result = $num1 - $num2;
}
return $result;
}
echo func(3, 4);
?>
Перепишите ее в сокращенной форме согласно изученной теории.