belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...
PHP+MySQL >>>
                          Учебник Задачник Справочник

5.4. Возврат значения функцией

Довольно часто при вызове функции она не только выполняет указанный фрагмент программного кода, но и возвращает некоторое значение, которое является результатом ее работы. Осуществляется операция возврата при помощи необязательного оператора return, который немедленно прекращает выполнение текущей функции и возвращает свой аргумент как значение данной функции. При этом оператор return может быть расположен в любом месте функции и, когда до него доходит управление, функция возвращает значение и завершает свое выполнение, передавая управление обратно к той строке кода, в которой данная функция была вызвана. Если оператор return не указан или не указано возвращаемое им значение, то функция вернет значение NULL. (см. пример 5.12).

<?php
function m_sum($a_1,$a_2){  //Создаем функцию, принимающую два аргумента 
	$sum = $a_1+$a_2;   		 //Вычисляем сумму и присваиваем переменной
	return  $sum;       		 //Возвращаем сумму в качестве значения функции 
	$sum=100;       			 //Эта инструкция выполнена не будет, т.к. 
									 //находится после оператора return
} 
echo m_sum(5,10); 			 //Выведет 15
?>

Пример 5.12. Возврат значений функции

Так как оператор return является языковой конструкцией, а не функцией, то использовать круглые скобки не нужно, иначе это может привести к нежелательным эффектам.

В PHP функции не могут возвращать несколько значений, но аналогичного результата можно добиться, возвращая массив (см. пример 5.13).

<?php
function m_sum(...$sum){ 	   //Используем список аргументов переменной длины
	$i=0; 							//Задаем стартовое значение счетчика
	foreach($sum as $value){   //Перебираем все значения массива аргументов
		$new_array[$i]=$value;  //Помещаем аргументы функции в массив
		$i+=1;						//Увеличиваем значение счетчика на единицу
	}
	return $new_array;       	//Возвращаем полученный массив
} 
echo m_sum(5,10,15,20)[1]; 	//Выведет второй элемент массива, т.е. 10

/* Таким образом, данная функция принимает аргументы, помещает их в массив и 
затем возвращает этот массив в качестве своего значения */
?>

Пример 5.13. Возврат значения функции в виде массива значений

В PHP 7.0.0 была добавлена возможность объявлять тип возвращаемого значения, аналогично объявлению типов принимаемых функцией аргументов. Соответственно, особенности, касающиеся как режима слабой типизации, так и режима строгой типизации, справедливы и для возвращаемых функцией значений. Это значит, что в случае несоответствия возвращаемого значения указанному типу в режиме слабой типизации делается попытка привести значение к корректному типу, а при включенном режиме строгой типизации, сразу же выводится ошибка.

Указывается тип возвращаемого значения при объявлении функции после круглых скобок с параметрами и двоеточия перед открывающей скобкой тела функции (см. пример 5.14).

<?php
declare(strict_types=1);  	//Задаем режим строгой типизации для скрипта

function my_sum(int $a,int $b): string{ //Задали тип string возвращаемого значения  
	$sum=$a+$b; 
	return  $sum;       		//Возвращаемое значение должно быть типа string  
} 
echo my_sum(5,2);   			//При вызове функции выведет ошибку 

								
	/* Напомним, что исключение составляет передача значения целочисленного 
	типа функции, которая ожидает получить значение типа float. 	 */		  
?>

Пример 5.14. Объявление типа возвращаемого функцией значения

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

Контрольные вопросы и задания

  1. Для чего предназначен оператор return?
  2. Каким образом можно осуществить возврат функцией нескольких значений?

Словарь новых английских слов

function [ˈfʌŋ(k)ʃ(ə)n] – функция.
return [rɪˈtəːn] – возвращать.
argument [ˈɑːɡjʊm(ə)nt] – аргумент.
closure [ˈkləʊʒə] – замыкание.
Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх