Тип подсказки не работает для строк в функции в PHP 7 - PullRequest
0 голосов
/ 16 декабря 2018

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

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 Ответ

0 голосов
/ 16 декабря 2018

Это связано с тем, что по умолчанию 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.

...