PHP :: Контроль типа аргументов
Для того, чтобы объявить тип передаваемого функции аргумента, необходимо указать его перед самим аргументом. В результате, если передаваемый аргумент будет иметь тип отличный от указанного, PHP по умолчанию будет пытаться привести его значение к скалярному типу. Если же преобразование окажется невозможным, интерпретатор сообщит об ошибке (см. пример №1).
<?php //Функция ожидает три целых числа function my_sum(int $a,int $b,int $c=null){ $sum=$a+$b; //Убеждаемся, что null принято функцией if($c===null){ echo 'null'.'<br>'; } //Возвращаем сумму аргументов функции return $sum; } //Т.к. данная строка может быть преобразована в число, //ошибки не возникнет и будет выведено '7' echo my_sum('5',2); //Будет выведена ошибка //echo my_sum('Строка',2); //Будет выведена ошибка //echo my_sum([2,5],2); ?>
Пример №1. Контроль типа аргументов функции
В качестве разрешенных для контроля типов могут использоваться следующие типы данных: array, object (рассмотрим чуть позже), callable, bool, float, integer, string. Здесь все типы, перечисленные после callable, стали доступны только в PHP 7.0.0. Если аргументу в качестве значения по умолчанию назначается NULL, то оно будет использовано при вызове функции без передачи аргументу значения в независимости от объявленного типа переменной.
Также в PHP 7.0.0 для отдельных php-файлов добавлена возможность устанавливать режим строгой типизации для скалярных типов данных, при которой аргументам функции разрешается передавать значения только объявленных типов. Исключение составляет передача значения целочисленного типа функции, которая ожидает получить значение типа float. Во всех остальных случаях интерпретатор будет выдавать ошибки. Для включения режима строгой типизации используется конструкция declare(strict_types=1); (см. пример №2).
<?php //Задаем режим строгой типизации для скрипта declare(strict_types=1); //Функция ожидает три целых числа function my_sum(int $a,int $b,int $c=null){ $sum=$a+$b; //null по-прежнему принят без проблем if($c===null){ echo 'null'.'<br>'; } //Возвращаем сумму аргументов функции return $sum; } //Выведет 7 echo my_sum(5,2); //Выведет ошибку, т.к. включен режим строгой типизации //echo my_sum('5',2); /* Закомментируйте строку с объявлением режима строгой типизации и посмотрите как интерпретатор отреагирует на строку 12 */ ?>
Пример №2. Использование строгой типизации
Отметим, что режим строгой типизации распространяется на вызовы функций совершенные из файла, в котором этот режим включен, а не на функции, которые в этом файле были объявлены. Это значит, что если файл, в котором режим строгой типизации выключен, вызывает функцию, которая была объявлена в файле с включенным режимом, значения аргументов будут приведены к нужным типам обычным способом по умолчанию, как-будто функция была объявлена в этом же файле.
Быстрый переход к другим страницам
- Аргументы функции в PHP
- Контроль типа аргументов в PHP
- Возврат значения функцией в PHP
- Вернуться к оглавлению учебника