Тип подсказки не работает для строк в функции в PHP 7

Тип подсказки не работает в случае строк.

function def_arg(int $name, int $address, string $test){
return $name . $address . $test;
}

echo def_arg(3, 4, 10) ;
// It doesn't throws an error as expected.

С другой стороны. если вы дадите строку в первом аргументе, она выдаст ошибку, говорящую, что это должно быть int.

 function def_arg(int $name, int $address, string $test){
return $name . $address . $test;
}

echo def_arg("any text", 4, "abc") ;

// this code throws an error
// "Fatal error: Uncaught TypeError: Argument 1 passed to def_arg() must be of the type integer, string given,"

почему нет ошибки в случае строк ??

1

Решение

Это связано с тем, что по умолчанию PHP по возможности приводит значения неправильного типа к ожидаемому скалярному типу. Например, функция, которой присвоено целое число для параметра, который ожидает строку, получит переменную типа string.

увидеть Вот

Если бы вы использовали значения, которые можно привести во втором примере, это сработало бы:

function def_arg(int $name, int $address, string $test){
return $name . $address . $test;
}

echo def_arg("12", "22", 1) ;

Это потому, что эти значения могут быть преобразованы из строки в int и наоборот.

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]