Включение '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.

Другие вопросы по тегам