Строгий режим типизации (strict_types
) — это важная особенность PHP, введенная в версии 7.0, которая значительно улучшает предсказуемость кода. Вот полное руководство по работе с ним:
declare(strict_types=1); // Должно быть первой инструкцией в файле
function add(int $a, int $b): int {
return $a + $b;
}
add("5", 2); // TypeError в strict mode, но работает в нестрогом
function divide(float $a, float $b): int {
return $a / $b; // TypeError если результат не integer
}
PHP поддерживает следующие типы в strict mode:
int
, float
, string
, bool
array
, callable
, iterable
ClassName
, self
, parent
?type
(начиная с PHP 7.1)mixed
(PHP 8.0+), void
В строгом режиме не происходит автоматического приведения типов:
function greet(string $name) {
echo "Hello, $name";
}
greet(123); // TypeError в strict mode
function handleInput(int|string $input): void {
if (is_int($input)) {
echo "Integer: $input";
} else {
echo "String: $input";
}
}
Точное соответствие типов:
function sendMessage(string $text): void {}
sendMessage(100); // Ошибка в strict mode
Nullable-типы:
function findUser(?int $id): ?User {}
Типизированные свойства (PHP 7.4+):
class User {
public int $id;
public string $name;
}
В strict mode возникают исключения TypeError
, которые нужно обрабатывать:
try {
add("5", 2);
} catch (TypeError $e) {
error_log("Type error: " . $e->getMessage());
// Альтернативная логика
}
function process(int $value) {}
process((int) "100"); // Явное приведение
assert()
для дополнительных проверок/** @param array<int> $ids */
function processIds(array $ids) {}
Строгий режим типизации:
declare(strict_types=1)
Для легаси-кода рекомендуется постепенное внедрение с явным приведением типов.