Forum und email

표현식 타입

PHP/FI 2.0은 결과값이 무슨 타입이 되어야 할지 결정하기 위해 표현식의 좌변을 사용한다. PHP 3.0은 결과 타입을 결정하는데 양변 모두를 취할 수 있다. 그리고 이런 형태는 2.0 스크립트가 3.0에서 기대하는대로 동작하지 않게 할수 있다.

다음 예제 코드를 보자:

$a[0]=5;
$a[1]=7;

$key = key($a);
while ("" != $key) {
    echo "$keyn";
    next($a);
}
PHP/FI 2.0에서, 이 예제코드는 $a의 인덱스를 출력할것이다. PHP 3.0에서는 아무것도 출력되지 않을것이다. 그 이유는 PHP 2.0 안에서 좌측 인자의 타입이 문자열이고, 문자열 비교가 수행되고, """0"과 같지 않아서 루프를 계속 돌기 때문이다. PHP 3.0에서는, 문자열이 정수와 비교될때, 정수 비교가 수행된다(문자열은 정수로 변환됨). 0이 되는 atoi("")와 비교되는데 variablelist0이 있어서, 0==0이기 때문에, 루프는 한번도 수행되지 않는다.

이것에 대한 변경은 간단하다. 다음과 같은 while 구문으로 변경한다:

while ((string)$key != "") {