Что такое строгие типы в PHP? - PullRequest
2 голосов
/ 05 августа 2020

Я знаю, что при использовании declare(strict_types=1) я должен передавать параметры данного типа, в противном случае возникает Exception, но один вопрос:

declare(strict_types=1);

function add(int $firstNumber, int $secondNumber)
{
    $firstNumber = "example";

    return $firstNumber . " " . $secondNumber;
}

Мой вопрос: почему мне разрешено изменять * Тип 1006 * на string, если int был объявлен?

Например, в Java я не могу выполнить приведение таким образом. Тип параметра int должен оставаться int, иначе код даже не скомпилируется.

1 Ответ

1 голос
/ 05 августа 2020

Это потому, что вы строго печатаете только входные данные функции, а не возвращаемые значения или какие-либо переменные в самой функции. Из документов -

Строгая типизация применяется к вызовам функций , выполненным из файла с включенной строгой типизацией, а не к объявленные функции ...

Таким образом, ваш вызов функции с нецелым числом:

add('example',2);

вернет ожидаемую ошибку -

Неустранимая ошибка: Uncaught TypeError: аргумент 1, переданный в add (), должен иметь тип int, заданную строку, вызываемую в ...

Но отправка целых чисел в вашу функцию позволит вызвать функцию продолжить, и переменные внутри будут иметь слабо типизированные.

...