Ответ 1
Это намеренно невозможно, потому что реализация, принятая после чрезвычайно продолжительного обсуждения подсказок скалярного типа, была такой: https://wiki.php.net/rfc/scalar_type_hints_v5
Он явно дает выбор того, как скалярные типы проверяются на вызывающую функцию любой функции, а не на ее автора, так что:
- Если вы пишете библиотеку со скалярными типами, вам гарантируются запрошенные типы параметров, даже если они вызваны кодом, написанным не в строгом режиме (вместо этого используются типы)
- Если вы пишете библиотеку и хотите традиционную слабую типизацию, вы все равно можете использовать библиотеки, которые используют подсказки типов (потому что они не заставляют вас выполнять строгую проверку типов).
- наоборот, если вы пишете библиотеку и хотите строгую типизацию для функций, которые вы вызываете, вам не нужно требовать, чтобы пользователи вашей библиотеки также включали строгую печать
- встроенные функции работают так же, как и пользовательские, и существующий код работает по умолчанию
- Если вы включите строгую печать, вам нужно изменить свой код, чтобы правильно его обрабатывать.
Поэтому вам нужно сказать PHP, какие файлы были написаны для использования режима строгого типа, а какие нет; и способ сделать это с помощью инструкции declare
.