PHP7: Строгая типизация

Категория: PHP

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

По умолчанию (при нестрогой типизации), PHP будет пытаться привести значения несоответствующих типов к скалярному типу, если это возможно. Например, если в функцию передается integer, а тип аргумента объявлен string, в итоге функция получит преобразованное string значение.

Но вы можете включить строгий контроль за передаваемыми типами значений с помощью конструкции:

declare(strict_types=1);
Примечание

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

Внимание!

Строгая типизация применима только к скалярным типам и работает только в PHP 7.0 и выше. Также как и сами объявления скалярных типов добавлены в этой версии.

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

Доступные типы значений в PHP 7:

  1. string;
  2. int;
  3. float;
  4. bool;
  5. array;
  6. callable;
  7. Closure;

Доступные только методов типы возвращаемых значений:

  1. self;
  2. parent;
  3. <имя класса>;
  4. <имя интерфейса>;
Примечание

Если вы хотите указать, что значением аргумента по умолчанию является NULL - нужно объявить тип NULL.

Синтаксис указания возвращаемого типа значения:

function someFn(array ...$arrays): array {
  return array_map(function(array $array): int {
    return array_sum($array);
  }, $arrays);
}

#php7 strict mode

категория: PHP