PHP 매뉴얼
이전 | 6. 장. 변수형 | 다음

# 타입 저글링

PHP는 변수 선언부의 명시적인 타입 정의를 요구하지않는다(지원하지않는다) 변수의 타입은 변수가 사용되는 환경에서 결정된다. 즉, 문자열 값을 변수 `$var`에 지정하면,`$var`는 문자열이 된다. integer값이 `$var`에 지정되면, integer가 된다.

PHP의 자동적인 타입 변환의 예로는 덧셈 연산자 '+'를 들수 있다. 피연산자 중 어느 하나가 float이라면, 모든 피연산자는 float으로 취급된다. 그렇지 않으면, 피연산자는 정수로 해석될것이고, 결과값도 정수가 될것이다. 이런일이 피연산자 자신의 타입을 바꾸지 않는다는 것에 주의하라; 피연산자가 어떻게 평가되느냐에 따라서만 변환이 이루어진다.

`<?php $foo = "0"; // $foo is string (ASCII 48) $foo += 2; // $foo is now an integer (2) $foo = $foo + 1.3; // $foo is now a float (3.3) $foo = 5 + "10 Little Piggies"; // $foo is integer (15) $foo = 5 + "10 Small Pigs"; // $foo is integer (15) ?>`

위 예제코드중 마지막 두가지가 이상해 보인다면, 문자열을 수로 변환을 참고.

어떤 변수를 특정 타입으로 취급하고자 한다면, 타입 캐스트 매뉴얼 섹션을 참고할것. 변수의 타입을 변환하려고 하면, settype()를 볼것.

이 섹션에서 다른 에제를 테스트하기 위해 var_dump() 함수를 사용할수 있다.

> 참고: 배열의 자동적인 변환 방식은 현재까지 정의되지 않았다.

> `<?php $a = "1"; // $a is a string $a[0] = "f"; // What about string offsets? What happens? ?>`

> PHP는 배열 인덱싱과 같은 문법을 사용하여 오프셋을 통하여 문자열 안의 인덱싱을 지원하기 때문에(역사적인이유로), 위 예제코드는 문제가 될 소지가 있다: $a는 그 첫번째 요소가 "f"를 갖는 배열이 되는가? "f"가 문자열 $a 문자열의 첫번째 문자가 되는가?

> 현재 버전 PHP는 두번째 할당문을 문자열 오프셋 인식으로 해석한다. 그래서 $a는 "f"가 되고, 자동 변환의 결과는 정의되지 않은것으로 여겨진다. PHP 4는 스트링 내의 문자에 접근하기 위한 중괄호 문법을 새로이 제공한다. 위에서 제시한것 대신 이문법을 사용하도록 한다

> `<?php $a = "abc"; // $a is a string $a{1} = "f"; // $a is now "afc" ?>`

> 자세한 정보는 문자열의 문자 접근과 변경섹션을 참고.

## 타입 캐스트

PHP에서 타입 캐스느는 C에서 동작하는 것과 유사하게 동작한다. 원하는 타입의 이름을 변수 앞 괄호안에 사용하여 캐스트될수 있다.

`<?php $foo = 10; // $foo is an integer $bar = (boolean) $foo; // $bar is a boolean ?>`

허용되는 캐스트는 다음과 같다:

- (int), (integer) - cast to integer

- (bool), (boolean) - cast to boolean

- (float), (double), (real) - cast to float

- (string) - cast to string

- (array) - cast to array

- (object) - cast to object

탭과 빈칸이 괄호안에서 허용된다는것에 주의한다. 그래서 다음 예는 기능적으로 동일하다:

`<?php $foo = (int) $bar; $foo = ( int ) $bar; ?>`

> 참고: 변수를 문자열로 캐스트하는 대신에, 큰 따옴표 안에 변수를 넣어줄수도 있다.

> `<?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"; } ?>`

특정 타입간의 캐스트가 될때 무슨일이 일어날지 여기서 명확하지 않으면 자세한 정보를 보기 위해 아래 섹션을 참고.

- 논리값으로 변환하기

- 정수로 변환하기

- float으로 변환하기

- 문자열로 변환하기

- 배열로 변환하기

- 객체로 변환하기

- resource로 변환하기

- 타입 비교 테이블

이전 | 처음으로 | 다음
이 문서에서 사용되는 의사 타입 | 위로 | 변수