과거의 PHP는 느슨한 타입 검사(Weak Typing)로 인해 예상치 못한 암묵적 형변환 버그가 자주 발생했습니다. 최신 PHP는 strict_types 선언과 복합 타입(Union, Intersection)을 도입하여, 유연함과 엔터프라이즈급 런타임 안정성을 동시에 제공하는 강력한 언어로 진화했습니다.
👉 4. Strict Typing (엄격한 타입)
런타임 안정성의 핵심
PHP는 기본적으로 느슨한 타입 언어(동적 타입)이지만, declare(strict_types=1);를 선언하면 엄격한 타입 체크를 강제할 수 있습니다.
이는 의도치 않은 타입 변환(예: 문자열 "1"이 정수 1로 변환되는 현상)을 막아주며, 예상치 못한 버그를 예방하고 코드의 예측 가능성을 크게 높여줍니다.
👉 5. Scalar & Complex Types
고도화된 타입 시스템
현대 PHP는 매우 강력한 타입 시스템을 갖추고 있습니다. Union Types(여러 타입 중 하나), Intersection Types(여러 인터페이스를 모두 만족) 등을 지원합니다.
여기에 어떤 값이든 될 수 있는 mixed나, 절대 반환하지 않는(예: 에러를 던지거나 종료) 함수를 위한 never 타입까지 추가되어, 더욱 견고한 코드를 작성할 수 있습니다.
Weak Typing vs Strict Typing
strict_types.php
<?php
declare(strict_types=1);
function addNumbers(int $a, int $b): int {
return $a + $b;
}
// strict_types=1 이 선언되어 있으므로, "1"이 정수 1로 변환되지 않고 즉시 TypeError가 발생합니다.
addNumbers("1", "2");
localhost:8000/strict_types.php
Fatal error: Uncaught TypeError: addNumbers(): Argument #1 ($a) must be of type int, string given, called in strict_types.php on line 8 and defined in strict_types.php:4
Stack trace:
#0 strict_types.php(8): addNumbers('1', '2')
#1 {main}
thrown in strict_types.php on line 4