php: объявлять аргументы типа функции

Я пытаюсь сделать функцию с объявленными типами аргументов, чтобы проверить быстро, если они находятся в правильном формате, но когда строка всегда возвращает эту ошибку. Обманутая фатальная ошибка: аргумент 2, переданный myfunction (), должен быть экземпляром строки, строки задан, вызван в path_to_file в строке 69 и определен в файле path_to_file в строке 49

function myfunction( array $ARRAY, string $STRING, int $INTEGER ) { return "Args format correct"; } myfunction(array("1",'2','3','4'), "test" , 1234); 

где ошибка?

Согласно документации PHP5 :

Тип подсказки может быть только типа объекта и массива (начиная с PHP 5.1). Традиционный тип hinting с int и string не поддерживается.

Поскольку string и int не являются классами, вы не можете «набирать» их в своей функции.

Вы можете сделать что-то вроде этого, которое всегда работало для меня

для строки

 function setData($Name=""){ } 

это заставляет имя быть строкой, оно не проверяет, является ли его строка

для числовых значений

 function setData($age=0){ } 

это заставляет возраст быть числом, если строка передана, значение будет равно 0

для значений массива существует два варианта

 function setData(array $data){ } 

если массив не передан, он выдаст ошибку

 function setData($data=array()){ } 

Это передало бы пустой массив no value для $data

Это может быть полезно для тех, кто видит этот пост с момента появления PHP 7

С PHP 7 теперь можно объявлять типы. Для получения дополнительной информации вы можете сослаться на следующую ссылку.

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

 function(string $name, boolean $is_admin) { //do something } 

string , int и другие встроенные типы не являются классами , в аргументе, которые вы указываете для класса , аргумента. Единственным поддерживаемым встроенным типом, который должен быть установлен, является array .

Вы не можете определить тип как string и int . PHP «не знает», каковы они.

Если вы не используете PHP 7.x или вам нужны некоторые сложные проверки аргументов (например, «массив или \ Traversable», потому что вы можете перемещать массивы, но они являются примитивными типами и не реализуют интерфейс \ Traversable), вы можете использовать модуль args из Нестандартная библиотека PHP (NSPL) .

 use const \nspl\args\numeric; use function \nspl\args\expects; function sqr($x) { expects(numeric, $x); return $x * $x; } sqr('hello world'); 

Выходы:

 InvalidArgumentException: Argument 1 passed to sqr() must be numeric, string given in /path/to/example.php on line 17 Call Stack: 0.0002 230304 1. {main}() /path/to/example.php:0 0.0023 556800 2. sqr() /path/to/example.php:17 

когда мне нужно использовать Type Hints, я делаю это:

 <?php declare(strict_types=1); 

Согласно PHP Manual , в PHP 5.x вы не можете использовать array как подсказку, но в PHP 7.x вы можете ! Взглянуть:

  • Class/interface name Параметр должен быть экземпляром данного класса или имени интерфейса. PHP 5.0.0
  • self Параметр должен быть экземпляром того же класса, что и тот, на котором определен метод. Это можно использовать только для методов класса и экземпляра. PHP 5.0.0
  • array Параметр должен быть массивом. PHP 5.1.0
  • callable Параметр должен быть допустимым. PHP 5.4.0
  • bool Параметр должен быть логическим значением. PHP 7.0.0
  • float Параметр должен быть числом с плавающей запятой. PHP 7.0.0
  • int Параметр должен быть целым числом. PHP 7.0.0
  • string Параметр должен быть строкой. PHP 7.0.0
  • iterable Параметр должен быть либо массивом, либо instanceof Traversable. PHP 7.1.0