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