PHP 매뉴얼
이전 | B. 부록. PHP 4에서 PHP 5로 이행 | 다음

# 이전 버전과 호환하지 않는 변경점

기존 PHP 4 코드의 대부분은 변경 없이 작동하지만, 다음의 비호환 변경점에 주의를 해야 합니다:

- strrpos()와 strripos()가 전체 문자열을 needle로 사용합니다.

- 문자열 오프셋의 비정상적인 사용은 `E_WARNING` 대신 `E_ERROR`를 발생합니다.

- array_merge()가 배열만을 받아들이게 변경되었습니다. 배열이 아닌 값을 넘기면, 그러한 인수마다 `E_WARNING`을 발생합니다. 코드가 갑작스레 `E_WARNING`를 표시하기 시작할 수 있으므로 주의하십시오.

- 더이상 Apahce2 SAPI에서 PATH_TRANSLATED 서버 변수를 자동으로 설정하지 않습니다. PHP 4에서는 아파치가 생성하지 않았을 때, SCRIPT_FILENAME 서버 변수와 동일하게 설정했었습니다. 이 변경은 CGI 규격에 따르기 위한 점입니다. 자세한 정보는 버그 #23610를 참고하십시오.

- Tokenizer 확장은 더 이상 `T_ML_CONSTANT` 상수를 정의하지 않습니다. error_reporting을 `E_ALL`로 설정하면, PHP가 주의문을 생성합니다. `T_ML_CONSTANT`는 사용되지 않았지만, PHP 4에서 정의되어 있었습니다. PHP 4와 PHP 5 둘 다, `T_COMMENT` 상수가 //와 /* */를 모두 인식합니다. 그러나 PHP 5에서 도입한, PHP가 처리하는 PHPDoc 스타일 주석 /** */은, `T_DOC_COMMENT`로 인식합니다.

- variables_order가 "S"를 포함하고 있으면, $_SERVER는 argc와 argv를 가져야 합니다. 시스템이 $_SERVER를 생성하지 않게 설정하였다면, 물론 존재하지 않아야 합니다. 변경 후에는 variables_order 설정에 관계 없이, CLI 버전에서 argc와 argv를 사용할 수 있게 만듭니다. 또한, CLI 버전은 항상 전역의 $argc와 $argv도 가집게 되었습니다.

- 프로퍼티가 없는 객체를 더 이상 "빈" 것으로 판단하지 않습니다.

- 클래스는 사용하기 전에 정의해야 합니다.

예 B-1. strrpos()와 strripos()가 전체 문자열을 needle로 사용합니다.

`<?php var_dump(strrpos('ABCDEF','DEF')); //int(3) var_dump(strrpos('ABCDEF','DAF')); //bool(false) ?>`

예 B-2. 프로퍼티가 없는 객체를 더 이상 "빈" 것으로 판단하지 않습니다.

`<?php class test { } $t = new test(); var_dump(empty($t)); // echo bool(false) if (!$t) { // 이 부분이 실행됩니다. } ?>`

다음 예제는 PHP 4에서는 유효하지만, PHP 5에서는 치명적인 오류를 생성합니다.

예 B-3. 클래스는 사용하기 전에 정의해야 합니다.

`<?php $test = new fubar(); $test->barfu(); class fubar { function barfu() { echo 'fubar'; } } ?>`

이전 | 처음으로 | 다음
PHP 4에서 PHP 5로 이행 | 위로 | CLI와 CGI