PHP 타입 소개

PHP 타입 소개 (Introduction)

PHP에서 표현식(expression) 하나하나는 값을 기준으로 다음 내장 타입 중 하나를 가져요.

  • null
  • bool
  • int
  • float (부동소수점 수)
  • string
  • array
  • object
  • callable
  • resource

PHP는 동적 타입 언어예요. 즉 변수의 타입을 따로 지정할 필요 없이, 실행 시점(runtime)에 값에 따라 타입이 정해져요. 하지만 타입 선언(type declarations) 을 활용하면 언어의 일부 측면을 정적으로 타입을 지정할 수도 있어요. PHP 타입 시스템이 지원하는 서로 다른 타입들은 타입 시스템 페이지에서 확인할 수 있어요.

타입은 그 타입에 수행할 수 있는 연산의 종류를 제한해요. 그런데 만약 표현식·변수가 자기 타입이 지원하지 않는 연산에 쓰이면, PHP는 그 연산을 지원하는 타입으로 값을 타입 저글링(type juggling) 하려고 해요. 이 과정은 값이 쓰이는 문맥에 따라 달라져요. 자세한 내용은 타입 저글링 섹션을 참고하세요.

— 서로 다른 타입의 값을 비교한 다양한 예시가 실려 있는 타입 비교 표도 유용하게 쓰일 수 있어요.

참고타입 캐스트를 쓰면 표현식이 특정 타입으로 평가되도록 강제할 수 있어요. 변수는 settype() 함수로 제자리에서 타입 캐스트할 수도 있고요.

표현식의 값과 타입을 함께 확인하려면 var_dump() 함수를, 타입만 알아내려면 get_debug_type() 함수를 써요. 다만 표현식이 특정 타입인지 확인할 때는 is_type 함수를 쓰는 게 맞아요.

예제 #1 — 서로 다른 타입

<?php
$a_bool = true;   // a bool
$a_str  = "foo";  // a string
$a_str2 = 'foo';  // a string
$an_int = 12;     // an int

echo get_debug_type($a_bool), "\n";
echo get_debug_type($a_str), "\n";

// If this is an integer, increment it by four
if (is_int($an_int)) {
    $an_int += 4;
}
var_dump($an_int);

// If $a_bool is a string, print it out
if (is_string($a_bool)) {
    echo "String: $a_bool";
}
?>

위 예제를 PHP 8에서 실행한 출력 결과예요.

bool
string
int(16)

참고 — PHP 8.0.0 이전에는 get_debug_type()이 없어서 대신 gettype() 함수를 쓸 수 있었어요. 다만 gettype()은 표준 타입 이름을 쓰지 않아요.