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



belarusweb.net

Основы создания сайтов...

PHP+MySQL >>>

                          Учебник Задачник Справочник

5.3. Контроль типа аргументов

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

<?php
function my_sum(int $a,int $b,int $c=null){  //Функция ожидает три целых числа 
	$sum=$a+$b; 
	if($c===null){				//Убеждаемся, что null принято функцией
		echo 'null'.'<br>';
	}
	return  $sum;       		//Возвращаем сумму аргументов функции 
} 
echo my_sum('5',2); 			//Т.к. данная строка может быть преобразована
									//в число, ошибки не возникнет и будет выведено '7' 
//echo my_sum('Строка',2); //Будет выведена ошибка
//echo my_sum([2,5],2);  	//Будет выведена ошибка						  
?>

Пример 5.10. Контроль типа аргументов функции

В качестве разрешенных для контроля типов могут использоваться следующие типы данных: array, object (рассмотрим чуть позже), callable, bool, float, integer, string. Здесь все типы, перечисленные после callable, стали доступны только в PHP 7.0.0. Если аргументу в качестве значения по умолчанию назначается NULL, то оно будет использовано при вызове функции без передачи аргументу значения в независимости от объявленного типа переменной.

Также в PHP 7.0.0 для отдельных php-файлов добавлена возможность устанавливать режим строгой типизации для скалярных типов данных, при которой аргументам функции разрешается передавать значения только объявленных типов. Исключение составляет передача значения целочисленного типа функции, которая ожидает получить значение типа float. Во всех остальных случаях интерпретатор будет выдавать ошибки. Для включения режима строгой типизации используется конструкция 'declare(strict_types=1);' (см. пример 5.11).

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

function my_sum(int $a,int $b,int $c=null){  //Функция ожидает три целых числа 
	$sum=$a+$b; 
	if($c===null){     		//null по-прежнему принят без проблем
		echo 'null'.'<br>';
	}
	return  $sum;       		//Возвращаем сумму аргументов функции 
} 
echo my_sum(5,2);   			//Выведет 7
//echo my_sum('5',2); 		//Выведет ошибку, т.к. включен режим строгой типизации
								
	/* Закомментируйте строку с объявлением режима строгой типизации	
	и посмотрите как интерпретатор отреагирует на строку 12		 */		  
?>

Пример 5.11. Использование строгой типизации

Отметим, что режим строгой типизации распространяется на вызовы функций совершенные из файла, в котором этот режим включен, а не на функции, которые в этом файле были объявлены. Это значит, что если файл, в котором режим строгой типизации выключен, вызывает функцию, которая была объявлена в файле с включенным режимом, значения аргументов будут приведены к нужным типам обычным способом по умолчанию, как-будто функция была объявлена в этом же файле.

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

  1. В чем заключается контроль типа аргументов?

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

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