Я объявил логический тип перед моим параметром ($ val) в функции (my_fnc)

Я передал аргумент по значению строки «foo», и ошибка не возникла, но я знаю, что если бы я объявил логическое значение, я мог бы передать только логическое значение, иначе оно вызовет исключение TypeError в php 7.

здесь я дал свой код примера

function my_fnc(bool $val){
       echo $val;
      }

my_fnc("hellow");

Когда я выполнил, ошибки не было. Почему?

Я знаю strict_types, но в этом типе (weak type) почему я не получил ошибку и как это работало?


person GaziAnis    schedule 04.02.2019    source источник


Ответы (1)


Это работает, потому что вы не объявили, что strict_types должен быть включен. Самая первая строка в вашей программе должна быть declare(strict_types=1); для применения строгих типов. Если вы измените свой пример, как показано ниже, вы получите сообщение об ошибке, как и ожидалось.

declare(strict_types=1);
function my_fnc(bool $val){
       echo $val;
      }

my_fnc("hellow");

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

person Dave    schedule 04.02.2019