Подтвердить что ты не робот

Включение "strict_types" во всем мире в PHP 7

В настоящее время я переношу свой сайт с PHP5 на PHP7, и я начал использовать строгую функцию набора текста, которая была добавлена. Однако для этого требуется, чтобы я начинал все файлы со следующей строки:

<?php declare(strict_types=1);

// All other code here
// ...

Итак, мне было интересно, есть ли способ включить strict_types глобально, используя что-то вроде php.ini или файл конфигурации apache, поэтому мне не нужно писать эту строку каждый раз, и если да, то как я могу включить это?

4b9b3361

Ответ 1

Это намеренно невозможно, потому что реализация, принятая после чрезвычайно продолжительного обсуждения подсказок скалярного типа, была такой: https://wiki.php.net/rfc/scalar_type_hints_v5

Он явно дает выбор того, как скалярные типы проверяются на вызывающую функцию любой функции, а не на ее автора, так что:

  • Если вы пишете библиотеку со скалярными типами, вам гарантируются запрошенные типы параметров, даже если они вызваны кодом, написанным не в строгом режиме (вместо этого используются типы)
  • Если вы пишете библиотеку и хотите традиционную слабую типизацию, вы все равно можете использовать библиотеки, которые используют подсказки типов (потому что они не заставляют вас выполнять строгую проверку типов).
  • наоборот, если вы пишете библиотеку и хотите строгую типизацию для функций, которые вы вызываете, вам не нужно требовать, чтобы пользователи вашей библиотеки также включали строгую печать
  • встроенные функции работают так же, как и пользовательские, и существующий код работает по умолчанию
  • Если вы включите строгую печать, вам нужно изменить свой код, чтобы правильно его обрабатывать.

Поэтому вам нужно сказать PHP, какие файлы были написаны для использования режима строгого типа, а какие нет; и способ сделать это с помощью инструкции declare.

Ответ 2

По существу нет.

Потому что, если вам нужны только библиотеки, которые использовали строгий режим, вы вызовете ненужное разделение пакетов. Также рассмотрим, что параметр strict/weak types является дополнительным в PHP.