Ответ
PHP исторически является языком со слабой (нестрогой) динамической типизацией, но с версии 7.0 поддерживает режим строгой типизации.
| Аспект | Нестрогая типизация (по умолчанию) | Строгая типизация (declare(strict_types=1)) |
|---|---|---|
| Приведение типов | Неявное, автоматическое. | Запрещено для скалярных типов в сигнатурах функций. |
| Обработка несоответствия | PHP попытается привести аргумент к ожидаемому типу. | Выбрасывается исключение TypeError. |
| Объявление | Работает по умолчанию. | Требует директивы в начале файла. |
Пример:
// Файл без strict_types (нестрогий режим)
function add(int $a, int $b): int {
return $a + $b;
}
echo add("10", 5.5); // PHP приведёт "10" к 10, а 5.5 к 5. Результат: 15
// Файл с strict_types (строгий режим)
declare(strict_types=1);
function addStrict(int $a, int $b): int {
return $a + $b;
}
// echo addStrict("10", 5); // Вызовет Fatal TypeError, т.к. строка "10" не является int
Практика: Использование strict_types=1 делает код более предсказуемым, предотвращает скрытые ошибки приведения типов и считается best practice для новых проектов.