PHP는 동적 타이핑 언어입니다 — 변수($ 접두사 사용)는 타입을 선언하지 않으며 어떤 값이든 담을 수 있습니다. PHP에는 스칼라, 복합 타입, 특수 값을 아우르는 여러 내장 타입이 있습니다.
변수와 스칼라 타입
= ;
= ;
= ;
= ;
= ;
변수는 항상 $로 시작하며 할당된 값으로부터 타입을 추론합니다. 네 가지 스칼라 타입은 int, float, string, bool입니다.
$list = [1, 2, 3]; // array (PHP의 만능 컬렉션)
$map = ["name" => "Ann"]; // 연관 배열 (키 → 값)
$obj = new User(); // object (클래스의 인스턴스)
$fn = fn($x) => $x * 2; // callable (closure/함수)
$nothing = null; // null — "값 없음"
array는 PHP의 다재다능한 컬렉션 타입이며(인덱스 리스트이자 키-값 맵), 그 외에 object, callable, null이 있습니다.
gettype($count); // "integer"
is_int($count); // true
is_string($name); // true
(int) "42"; // 42 — 명시적 캐스트
(string) 42; // "42"
intval("42px"); // 42
// PHP는 연산 시 자동으로 타입을 변환합니다 ("타입 저글링")
"5" + 3; // 8 (문자열 "5"가 int로 강제 변환됨)
"5" . 3; // "53" (. 은 연결 연산자 → 둘 다 문자열이 됨)
// 느슨한 비교 vs 엄격한 비교
0 == "hello"; // 과거 PHP에서는 true (PHP 8에서는 false) — 타입 저글링 함정
0 === "0"; // false — 엄격한 비교는 타입까지 확인함 (권장!)
"1" == 1; // true (느슨) — 하지만 "1" === 1 은 false
PHP의 자동 타입 저글링은 놀라운 비교 결과를 야기합니다. 해결책은 타입과 값을 모두 검사하는 **엄격한 비교(===)**를 선호하여 느슨한 비교(==)의 함정을 피하는 것입니다.
PHP의 변수 타입을 이해하는 것은 기본적인 일상 지식입니다.
핵심은 다음과 같습니다. PHP는 동적 타이핑 언어이며(변수가 어떤 값이든 담고, 타입은 할당으로 추론), 스칼라 타입과 다재다능한 array(리스트이자 맵 역할을 하는 PHP에서 가장 많이 쓰이는 자료구조), object, null을 갖습니다.
무엇보다 중요한 것은 타입 저글링 — 연산과 비교에서 PHP가 자동으로 타입을 변환하여 악명 높은 놀라운 결과를 야기하는 것 — 을 아는 것과, 그 함정을 피하기 위해 느슨한 비교(==)보다 **엄격한 비교(===)**를 사용하는 관행이 올바르고 버그 없는 PHP를 작성하는 데 필수적이라는 점입니다.
+(숫자)와 .(문자열 연결)의 구분, 그리고 명시적 캐스팅 역시 일상적인 기본기입니다.
이 기초적인 타입 지식은 올바른 PHP 코드의 토대이며, 이 언어의 잘 알려진 비교 함정을 피하는 데 도움이 됩니다.