유형 저글링(Type Juggling)
PHP는 변수 선언에서 명시적 유형 정의를 요구하지 않습니다(또는 지원하지 않습니다). 변수의 유형은 변수가 사용되는 컨텍스트에 따라 결정됩니다. 즉, $var 변수에 문자열 값을 대입하면 $var는 문자열이 됩니다. int 값이 $var에 할당되면 int가 됩니다.
PHP의 자동 유형 변환의 예는 곱셈 연산자 '*'입니다. 피연산자 중 하나가 부동 소수점이면 두 피연산자가 모두 부동 소수점으로 평가되고 결과는 부동 소수점이 됩니다. 그렇지 않으면 피연산자가 int로 해석되고 결과도 int가 됩니다. 이것은 피연산자 자체의 유형을 변경하지 않습니다. 유일한 변경 사항은 피연산자가 평가되는 방식과 표현식 자체의 유형입니다.
<?php
$foo = "1"; // $foo is string (ASCII 49)
$foo *= 2; // $foo is now an integer (2)
$foo = $foo * 1.3; // $foo is now a float (2.6)
$foo = 5 * "10 Little Piggies"; // $foo is integer (50)
$foo = 5 * "10 Small Pigs"; // $foo is integer (50)
?>
위의 마지막 두 예가 이상하게 보이면 숫자 문자열이 정수로 변환되는 방식을 확인하세요.
변수가 특정 유형으로 평가되도록 하려면 유형 캐스팅 섹션을 참조하세요. 변수의 유형을 변경하려면 settype() 함수를 참조하십시오.
이 섹션의 예제를 테스트하려면 var_dump() 함수를 사용하십시오.
메모:
배열로의 자동 변환 동작은 현재 정의되지 않았습니다.
또한 PHP는 배열 인덱싱과 동일한 구문을 사용하여 오프셋을 통해 문자열 인덱싱을 지원하므로 다음 예제는 모든 PHP 버전에 적용됩니다.
<?php
$a = 'car'; // $a is a string
$a[0] = 'b'; // $a is still a string
echo $a; // bar
?>
자세한 내용은 문자별 문자열 액세스 섹션을 참조하세요.
Type Casting
PHP의 유형 캐스팅은 C에서와 마찬가지로 작동합니다. 원하는 유형의 이름은 캐스팅할 변수 앞에 괄호 안에 기록됩니다.
<?php
$foo = 10; // $foo is an integer
$bar = (boolean) $foo; // $bar is a boolean
?>
허용되는 캐스트는 다음과 같습니다.
- (int), (integer) - cast to int
- (bool), (boolean) - cast to bool
- (float), (double), (real) - cast to float
- (string) - cast to string
- (array) - cast to array
- (object) - cast to object
- (unset) - cast to NULL
(바이너리) 캐스팅 및 b 접두사가 포워드 지원을 위해 존재합니다. (바이너리) 캐스트는 (문자열)과 동일하게 필수적이지만 의존해서는 안 됩니다.
(설정되지 않은) 캐스트는 PHP 7.2.0부터 더 이상 사용되지 않습니다. (설정되지 않은) 캐스트는 변수나 호출에 NULL 값을 할당하는 것과 같습니다. (설정되지 않은) 캐스트는 PHP 8.0.0에서 제거되었습니다.
탭과 공백은 괄호 안에 허용되므로 다음은 기능적으로 동일합니다.
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
리터럴 문자열과 변수를 이진 문자열로 캐스팅:
<?php
$binary = (binary) $string;
$binary = b"binary string";
?>
메모:
변수를 문자열로 캐스팅하는 대신 변수를 큰따옴표로 묶는 것도 가능합니다.
<?php
$foo = 10; // $foo is an integer
$str = "$foo"; // $str is a string
$fst = (string) $foo; // $fst is also a string
// This prints out that "they are the same"
if ($fst === $str) {
echo "they are the same";
}
?>
특정 유형 간에 캐스팅할 때 어떤 일이 일어날지 정확히 명확하지 않을 수 있습니다. 자세한 내용은 다음 섹션을 참조하세요.