PHP에서는 변수형을 명확하게 선언할 필요도 없고, 변수형 선언이 제공되지도 않는다. 변수의 type은 구문내에서 사용되어질때 결정된다. 다시말해 변수var에 문자열을 대입하면, 변수 var 의 형은 문자열이 되고, 변수 var에 정수값을 대입하면 정수형 변수가 된다
PHP의 자동형변환에 대한 예는 '+'연산자에 대한 역활을 보면 알수 있다. '+'연산자가 사용된 연산 중에 하나의 피연산자가 double형이라면 다른 피연산자들도 double형으로 계산되어 결과는 double형이 된다. 마찬가지로 하나의 피연산자가 정수형이라면 그 결과도 정수형이 된다. 여기서 주의해야 할 것은 어떤 피연자에 의해 다른 피연산자의 형이 바뀌는 것이 아니라, 단지 그 결과값의 형을 결정하는 데에만 영향을 미친다는 것이다.
$foo = "0"; // $foo 는 문자열 변수 (ASCII 48) $foo++; // $foo 는 문자열 변수 "1" (ASCII 49) $foo += 1; // $foo 는 정수형 변수로 변환되었다. (2) $foo = $foo + 1.3; // $foo 는 double형 변수로 변환되었다. (3.3) $foo = 5 + "10 Little Piggies"; // $foo 는 정수형 변수 (15) $foo = 5 + "10 Small Pigs"; // $foo 는 정수형 변수 (15) |
위의 예들 중 마지막 두 예가 이해가 되지 않는다면 문자열 변환(String conversion)을 참조하기 바란다.
변수를 특정한 형(type)으로 취급되도록 하고자 할 경우 Type casting을 참조하고, 변수의 형을 변환시키려고 한다면 settype()을 참조하기 바란다.
만약 위의 예제를 실제 실험하고자 한다면, 위의 예제를 잘라 붙인 후에, 어떤 일이 일어났는 가를 알기 위해 아래의 문장을 삽입하여 살펴볼 수 있다.
참고: 배열로의 자동 형변환은 일반적으로 정의되어 있지 않다.
위의 예는 $a가 첫번째 요소로 'f'를 가지는 배열로 형변환 되는게 명확하게 보이지만, 아래의 경우를 생각해 보자
PHP에서는 배열의 인덱스(index)와 동일한 형태를 사용하여, 문자열 변수에 오프셋(offset)을 이용한 인덱스(index)를 사용할 수 있다. 따라서 위의 예는 다음과 같은 문제를 안고 있다.: $a가 첫번째 요소가 "f"인 배열인가? "f"가 문자열 변수 $a의 첫번째 문자가 되어야 하는가?
이러한 이유로, PHP 3.0.12 와 PHP 4.0b3-RC4에서 위와 같은 경우의 자동 형 변환은 정의되어 있지 않다고 한다. 이에 대한 정확한 정의는 논의 되어 질것이다.
PHP에서 변수형 적용(type casting)은 C language에서와 매우 유사하다. 원하는 타입을 적용(casting)되어지는 변수앞에 괄호로 묶어서 써 주기만 하면 된다.
아래와 같은 경우를 적용할 수 있다:
(int), (integer) - 정수로 cast
(real), (double), (float) - double형으로 cast
(string) - 문자열로 cast
(array) - 배열로 cast
(object) - 객체(object)로 cast
괄호안에 tab이나 공백문자는 허용되므로 아래의 두 문장은 같이 취급된다.
특정한 타입으로 casting될때의 결과는 명확하지 않다. 예를 들어 다음과 같은 경우 주의를 요한다.
스칼라(scalar)변수나 문자열 변수가 배열로 casting될때 그 변수는 배열의 첫번째 요소가 된다.
스칼라(scalar)변수나 문자열 변수가 객체로 casting될때 그 변수는 'scalar'라는 객체의 속성값이 된다.