Включение 'strict_types' глобально в PHP 7
В настоящее время я перевожу свой сайт с PHP5 на PHP7, и я начал использовать функцию строгой типизации, которая была добавлена. Однако для этого необходимо, чтобы я начал все файлы со следующей строки:
<?php declare(strict_types=1);
// All other code here
// ...
Вот мне и стало интересно, есть ли способ включить strict_types
глобально используя что-то вроде php.ini
или файл конфигурации apache, чтобы мне не приходилось каждый раз писать эту строку, и если да, то как я могу включить это?
2 ответа
Это намеренно невозможно, потому что реализация, принятая после чрезвычайно длительного обсуждения подсказок скалярного типа, была такой: https://wiki.php.net/rfc/scalar_type_hints_v5
Он явно дает выбор того, как скалярные типы проверяются вызывающей стороной любой функции, а не ее автором, так что:
- если вы пишете библиотеку со скалярными подсказками типов, ваши функции гарантированно запрашивают типы параметров, даже если они вызываются кодом, не написанным в строгом режиме (вместо этого типы приводятся в соответствие)
- если вы пишете библиотеку и хотите использовать традиционную слабую типизацию, вы все равно можете использовать библиотеки, которые используют подсказки типов (поскольку они не заставляют вас выполнять строгую проверку типов)
- наоборот, если вы пишете библиотеку и хотите строгое печатание для вызываемых вами функций, вам не нужно требовать, чтобы пользователи вашей библиотеки также включали строгую типизацию
- встроенные функции работают так же, как пользовательские, а существующий код выполняется по умолчанию
- если вы включите строгую типизацию, вам все равно придется изменить код для правильной обработки
Поэтому вы должны сообщить PHP, какие файлы были написаны для использования режима строгого типа, а какие нет; и способ сделать это с помощью declare
заявление.
В PHPStorm есть инспекция, которая поможет вам в этом:
h ttps:https://stackru.com/images/d3d804ab59058fbf13017ca1014945e1a32df351.png
По сути нет.
Потому что, если вам нужны только библиотеки, которые используют строгий режим, вы вызовете ненужное разделение пакетов. Также учтите, что опция строгих / слабых типов - это просто дополнительный элемент в PHP.