2016-05-09 3 views
19

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

<?php declare(strict_types=1); 

// All other code here 
// ... 

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

+2

Нет, это невозможно. –

+3

Вы можете включить strict_types глобально, используя 'sed',' awk' или другой инструмент по вашему выбору, чтобы заменить все ' NikiC

+0

@NikiC I ' m довольно уверен, что простая find-replace в любой IDE будет делать то же самое, мне просто интересно, можно ли это сделать во время выполнения в качестве стандартной функции, поскольку я ничего не мог найти об этом – Paradoxis

ответ

19

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

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

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

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

1

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

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

Смежные вопросы