Forum und email

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

기존 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도 가집게 되었습니다.
  • 프로퍼티가 없는 객체를 더 이상 "빈" 것으로 판단하지 않습니다.
  • 클래스는 사용하기 전에 정의해야 합니다.

Example#1 strrpos()strripos()가 전체 문자열을 needle로 사용합니다.

<?php
var_dump
(strrpos('ABCDEF','DEF')); //int(3)

var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>

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

<?php
class test { }
$t = new test();

var_dump(empty($t)); // echo bool(false)

if (!$t) {
    
// 이 부분이 실행됩니다.
}
?>

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

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

<?php
$test 
= new fubar();
$test->barfu();

class 
fubar {
    function 
barfu() {
        echo 
'fubar';
    }
}
?>