Я видел следующую новую строку в PHP 7, но никто толком не объясняет, что это значит. Я погуглил, и все, о чем они говорят, это то, включите ли вы это или нет, как в опросах.
declare(strict_types = 1);
Что оно делает? Как это повлияет на мой код? Я должен сделать это?
Некоторое объяснение было бы неплохо.
php
php-7.2
strong-typing
weak-typing
sufuko
источник
источник
Ответы:
Из блога Treehouse :
По умолчанию PHP будет преобразовывать значения неправильного типа в ожидаемый скалярный тип, если это возможно. Например, функция, которой задано целое число для параметра, ожидающего строку, получит переменную типа строка.
Строгие типы отключены ( eval ):
Можно включить строгий режим для каждого файла. В строгом режиме будет принята только переменная с точным типом объявления типа, в противном случае будет сгенерирована ошибка TypeError. Единственное исключение из этого правила - целое число может быть присвоено функции, ожидающей число с плавающей точкой. На вызовы функций из внутренних функций объявление strict_types не повлияет.
Чтобы включить строгий режим, оператор declare используется с объявлением strict_types:
Включены строгие типы ( eval ):
Рабочий пример:
источник
strict_types
влияет на приведение типов.Использование подсказок типов без них
strict_types
может привести к незначительным ошибкам.До жестких типов это
int $x
означало «$x
должно иметь значение, приводимое к int». Любое значение, которое может быть приведеноint
к типу, будет передавать подсказку типа, включая:242
),10.17
),true
),null
, или"13 Ghosts"
).Устанавливая
strict_types=1
, вы сообщаете движку, чтоint $x
«$ x должен быть только целым int, принуждение типа не допускается». У вас есть большая уверенность в том, что вы получаете именно то и только то, что было дано, без какой-либо конверсии и потенциальных потерь.Пример:
Дает потенциально запутанный результат:
Я думаю, что большинство разработчиков ожидают, что
int
подсказка будет означать «только int». Но это не так, это означает «что-то вроде int». Включение strict_types дает ожидаемое и желаемое поведение:Урожайность:
Я думаю, здесь есть два урока, если вы используете подсказки типа:
strict_types=1
всегда.strict_types
прагму.источник
strict_types
.Строгие типы в PHP влияют на типы принуждения.
Устанавливая «strict_types = 1», вы сообщаете движку, что «int $ x» означает «$ x должен быть только соответствующим int, принуждение типа не допускается». У вас есть большая уверенность в том, что вы получаете именно то и только то, что было дано, без какой-либо конверсии или потенциальных потерь.
Все, что вам нужно знать о строгих типах в PHP :)
https://medium.com/@chemaclass/strict-types-in-php-d4166bd25394
источник