IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  오픈 소스  >

PHP V5.3의 새로운 기능, Part 5: PHP V5.2에서 업그레이드하기

변경 사항, 호환성 및 제거될 기능

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

영어원문

영어원문


제안 및 의견
피드백

난이도 : 중급

John Mertic, Software Engineer, SugarCRM

원문 게재일 : 2009 년 2 월 24 일
번역 게재일 : 2009 년 5 월 26 일

이 "PHP V5.3의 새로운 기능" 시리즈에서는 곧 발표될 예정인 PHP V5.3의 흥미롭고 새로운 기능에 대해 설명합니다. Part 1에서는 PHP V5.3의 오브젝트 지향 프로그래밍 및 오브젝트 처리와 관련된 변경 사항을 살펴보았으며, Part 2에서는 람다 함수와 클로저에 대해 살펴보았습니다. Part 3에서는 PHP V5.3에서 가장 큰 기대를 받으면서도 가장 큰 논란의 대상이기도 한 네임스페이스에 대해 설명했으며 Part 4에서는 PHP 내에서 사용할 수 있는 아카이브 형식인 Phar에 대해 자세히 살펴보았습니다. 이제 이 시리즈의 마지막 기사인 Part 5에서는 PHP V5.2에서 업그레이드할 때 고려할 사항에 대해 설명합니다. PHP V5.3에는 이전 버전과 호환되지 않는 변경 사항과 후속 버전에서 제거될 예정인 사용되지 않는 기능이 있습니다. PHP의 기존 기능에 대한 몇 가지 개선 사항에 대해서도 설명합니다.

소개

지금까지 이 시리즈에서는 네임스페이스, 클로저, 오브젝트 처리, 오브젝트 지향 프로그래밍, Phar 등과 같은 PHP V5.3의 새로운 기능을 주로 살펴보았다. 이들 유용한 새 기능 외에도 PHP V5.3에는 PHP의 전반적인 성능을 대폭 개선하기 위한 설계가 적용되었다. 많은 개발자가 사용하고 있는 안정적인 PHP V5.2를 기반으로 설계된 PHP V5.3은 강력한 성능을 제공한다. 이 기사에서는 PHP V5.2에서 업그레이드할 때 고려할 사항과 변경 사항에 대해 설명한다.




위로


구문 변경 사항

네임스페이스 및 클로저 기능(Part 2Part 3 참조)이 추가되면서 예약어도 추가되었다. PHP V5.3부터는 namespace를 더 이상 식별자로 사용할 수 없다. closure 클래스는 예약 클래스이지만 올바른 식별자로 계속 사용할 수 있다. Listing 1에서는 추가된 예약어로 인해 PHP V5.3에서 더 이상 작동하지 않는 명령문 예제를 보여 준다.


Listing 1. 올바르지 않은 PHP 명령문

// the function definition below will throw a fatal error in PHP 5.3, but is perfectly 
// valid in 5.2
function namespace() 
{
....
}

// same with this class definition
class Closure
{
....
}

goto 명령문에 대한 지원도 PHP V5.3에서 추가되었다. 이제 goto는 예약어이다. goto 명령문은 현대 언어에서 많이 사용되고 있지는 않지만(과거 BASIC에서 자주 사용됨) 아직까지도 가끔씩은 유용하게 사용할 수 있는 경우가 있다. Listing 2 예제에서는 이 명령문의 작동 방법을 보여 준다.


Listing 2. PHP의 goto 명령문

echo "This text will get outputted";
goto a;

echo "This text will get skipped";

a:
echo "This text will get outputted"; 

goto는 여러 번 중첩된 루프 및 if 명령문에서 빠져 나올 때 유용하게 사용할 수 있다. 이러한 경우에 goto 명령문을 사용하면 코드를 훨씬 쉽게 읽을 수 있다.




위로


함수 및 메소드의 변경 사항

PHP V5.3에서는 함수와 메소드가 많이 변경되지는 않았지만 PHP의 당면 문제와 성능 향상을 위해 몇 가지 개선 사항이 적용되었다. 이 섹션에서는 몇 가지 주목할 만한 변경 사항에 대해 설명한다.

이전 버전의 PHP에서는 배열 함수 atsort, natcasesort, usort, uasort, uksort, array_fliparray_unique에서 배열 대신 오브젝트를 매개변수로 전달한다. 그런 다음 이들 함수는 오브젝트의 특성을 배열 키 및 값으로 간주한다. PHP V5.3에서는 이 기능을 더 이상 사용할 수 없으므로 오브젝트를 배열로 먼저 변환해야 한다. Listing 3에서는 코드를 변경하는 방법을 보여 준다.


Listing 3. 특정 함수에 사용되는 오브젝트를 배열로 변환하기 위해 코드 변경하기

$obj = new stdClass;
$obj->a = '1';
$obj->b = '2';
$obj->c = '3';

print_r(array_flip($obj)); // will NOT work in PHP 5.3, but will in PHP 5.2

print_r(array_flip((array) $obj)); // will work in PHP 5.3 and 5.2

매직 클래스 메소드가 더욱 엄격하게 적용된다. 다음과 같은 메소드의 가시성은 public이어야 한다.

  • __get
  • __set
  • __isset
  • __unset
  • __call

정적 컨텍스트에서 __call을 사용했던 경우에는 새로운 __callStatic() 매직 메소드를 이 변경 사항에 대한 해결 방법으로 사용할 수 있다. 매개변수를 받지 않는 __isString() 매직 메소드를 제외한 나머지 매직 메소드에는 필수 인수가 반드시 있어야 하고 적용되어야 한다. Listing 4에서는 이러한 메소드 및 해당 필수 매개변수를 사용하는 방법을 보여 준다.


Listing 4. 매직 메소드 사용하기

class Foo
{
    public function __get($key) {} // must be public and have one parameter
    public function __set($key,$val) {} // must be public and have two parameters

    public function __toString() {} must be public and have no parameters
}

이전 버전의 Windows용 PHP에서 지원되지 않았던 몇 가지 함수가 PHP V5.3에서 지원된다. 예를 들어 getopt() 함수는 명령행에서 PHP 스크립트를 호출하는 옵션을 구문 분석하기 위해 설계되었다. 인터넷 주소를 인코딩 및 디코딩하는 inet_ntop()inet_pton() 함수가 이제 Windows®에서도 작동한다. asinh(), acosh(), atanh(), log1p()expm1() 등의 몇 가지 수학 함수도 Windows에서 지원된다.




위로


확장 변경 사항

PHP의 새 확장은 주로 PECL(PHP Extension C Library)을 기반으로 하여 개발된다. 하나의 확장이 발전을 거듭하며 안정적인 상태에 도달하게 되면 이 확장은 자연스럽게 코어 배포판의 유용한 기능으로 인식되면서 주요 버전 변경 시에 추가되기도 한다. 이처럼 PHP V5.3에서도 다음과 같은 확장이 코어 PHP 배포판의 일부로 추가되었다.

FileInfo
파일에 있는 특정 매직 바이트 문자 시퀀스를 검사하여 파일의 컨텐츠 유형 및 인코딩을 확인하는 데 사용할 수 있는 함수를 제공한다.
intl
ICU(International Components for Unicode) 라이브러리에 대한 랩퍼로 유니코드 및 세계화 지원을 위한 함수를 제공한다.
Phar
Part 4에서 설명한 PHP 아카이브 도구이다.
mysqlnd
MySQL 데이터베이스 액세스를 위한 원시 PHP 드라이버이며 libmysql 라이브러리를 활용했던 기존 MySQL 및 MySQLi 확장을 대체한다.
SQLite3
SQLite V3 데이터베이스를 사용하기 위한 라이브러리이다.

더 이상 적극적으로 관리되지 않거나 코어 PHP 배포판에 유지할 만한 가치가 없는 것으로 판단된 확장은 PECL로 옮겨진다. PHP V5.3의 확장을 조정하는 과정에서 다음과 같은 확장은 코어 PHP 배포판에서 제거하고 PECL의 일부로 유지하는 것으로 결정되었다.

ncurses
명령행에서 그래픽 출력을 표시하는 데 사용되는 curse의 에뮬레이션이다.
fpdf
PDF 문서 내의 양식 및 양식 데이터를 빌드하고 사용하는 방법을 처리한다.
dbase
dbase 호환 파일을 읽고 쓰는 데 필요한 지원을 제공한다.
fbsql
Frontbase 데이터베이스 서버에 대한 데이터베이스 액세스를 지원한다.
ming
Flash 4 애니메이션을 만드는 데 사용되는 오픈 소스 라이브러리이다.

Sybase 확장은 완전히 제거되고 sybase_ct 확장으로 대체되었다. sybase_ct 확장은 이전 확장과 완전히 호환되며 임시 대체용으로 제공되는 확장이다. 새로운 함수는 사용자의 웹 서버에 설치해야 하는 Sybase client 라이브러리를 사용하게 된다.




위로


빌드 변경 사항

PHP V5.3에서는 많은 노력을 들여서 빌드 프로세스를 개선하였으며 그 결과로서 모든 플랫폼에서 더욱 쉽게 PHP를 빌드할 수 있게 되었다. PHP 빌드 간의 일관성을 유지하고 보장된 PHP 구성 요소 세트를 제공하기 위해 더 이상 PCRE, Reflection 및 SPL 확장을 빌드에서 비활성화할 수 없게 되었다. 따라서 이러한 확장을 사용할 뿐 아니라 사용 가능성까지도 보장되는 배포 가능한 PHP 애플리케이션을 빌드할 수 있다.

지난 해에 새 팀에서 PHP Windows 빌드를 인수했다. 이 팀에서는 PHP V5.3부터 Windows 사용자를 위한 몇 가지 개선 사항을 제공할 것이다. 새 빌드는 586 아키텍처(Intel® Pentium® 이상)를 대상으로 하고 Windows 2000/XP 이후 버전만을 지원하며 Windows 98/NT 이전 버전은 지원하지 않는다. Microsoft® Visual Studio® 2008을 사용하여 작성된 PHP 빌드와 x86-64 아키텍처를 대상으로 하는 빌드가 작성될 것이다. 이들 빌드는 Microsoft IIS 웹 서버의 FastCGI 또는 같은 컴파일러 및 아키텍처를 사용하여 빌드된 Apache와 함께 작동할 때 향상된 성능을 제공한다. Windows Installer 또한 PHP를 Microsoft IIS 웹 서버에 더욱 적합하게 구성할 수 있도록 향상되었다. 이 팀은 Windows용 PHP와 관련된 웹 사이트를 제공하고 있다(참고자료 참조).




위로


.ini 변경 사항

PHP의 중요한 특징 중 하나는 .ini 파일을 사용하여 작동을 구성할 수 있다는 것이다. PHP V5.3에서는 이 파일에 사용되는 지시문 중 문제의 소지가 있는 몇 가지 지시문(예: zend.ze1_compatibility_mode 설정)이 제거되었다. 이제부터는 이 파일을 매우 유연하게 사용할 수 있다.

php.ini 파일에는 다음과 같은 두 가지 주요 개선 사항이 있다.

  • php.ini 파일에서 변수를 사용할 수 있다. 변수를 사용하게 되면 파일 내에서 중복되는 항목을 쉽게 제거할 수 있고 변경이 필요할 때 파일을 쉽게 업데이트할 수 있다. Listing 5에서는 이에 대한 예제를 보여 준다.

    Listing 5. php.ini 파일의 변수
     
    foo = bar 
    
    [section]
    newfoo = ${foo}
    

    foonewfoo가 같은 값을 가지고 있다.
  • Apache 구성 파일을 사용하여 동일한 설정을 적용할 때와 비슷하게 디렉토리별 및 사이트별 PHP ini 설정을 적용할 수 있다. 이 방법의 장점은 PHP를 실행할 수 있는 다양한 모든 SAPI에서 일관된 구문을 사용할 수 있다는 것이다. Listing 6에서는 이러한 설정이 작동하는 방법을 보여 준다.

    Listing 6. 사이트별 및 디렉토리별 .ini 설정
    
    [PATH=/var/www/site1] 
    
    ; directives here only apply to PHP files in the /var/www/site1 directory 
    
    [HOST=www.example.com] 
    
    ; directives here only apply to PHP files requested from the www.example.com site.
          

Apache HTTP 웹 서버에서 작동하는 .htaccess 파일처럼 이러한 .ini 지시문을 파일 시스템 자체에 있는 사용자 지정 .ini 파일로 작성할 수도 있다. 이 파일의 기본 이름은 user_ini.filename 지시문에서 지정한다. 이 지시문을 빈 값으로 설정하여 이 기능을 비활성화할 수 있다. 사이트별 및 디렉토리별 지시문은 사용자 지정 .ini 파일에서 재정의할 수 없다.




위로


제거된 항목

PHP V5.3부터는 공식적으로 후속 버전의 PHP에서 더 이상 사용할 수 없는 오래된 함수가 제거된다. 이러한 함수를 사용하면 E_DEPRECATED 오류가 발생한다. PHP V5.3에서 제거된 함수는 다음과 같다.

  • declare() 블록 내에서 구문 분석기에 의해 n개의 명령문이 실행될 때마다 함수를 호출하기 위해 설계된 틱 함수(declare(ticks=N)register_tick_function()). 이들 함수는 함수 내에 중단되는 부분이 너무 많고 기능 자체가 많이 사용되지 않기 제거되었다.
  • 모든 syslog 관련 변수를 초기화하는 define_syslog_variables(). 이 함수에서 정의한 상수가 이미 전역으로 정의되어 있기 때문에 이 함수는 더 이상 필요하지 않다. 이 함수 호출은 제거하기만 하면 된다.
  • ereg 정규 표현식 함수. 이 함수 대신 다른 언어 및 애플리케이션에서 사용되는 정규 표현식과의 일관성이 높고 처리 속도가 빠른 PCRE 정규 표현식 함수를 사용하는 것이 좋다. ereg 함수는 PHP의 정규 표현식 엔진을 하나로 표준화하기 위해 제거되었다.

PHP V5.3에서는 이러한 함수를 사용하지 않는 것이 좋다. 향후 주요 PHP 릴리스에서는 위 항목들에 대한 지원이 제거될 것이다.




위로


요약

PHP V5.3에서는 수많은 새 기능이 추가되었으며 여러 항목이 "정리"되었다. 이전 버전과의 호환성으로 인한 몇 가지 문제도 있다. 이 기사에서는 웹 애플리케이션을 PHP V5.3과 작동하도록 마이그레이션하는 데 유용한 몇 가지 지침을 제공한다. PHP V5.3과 관련된 최신 정보를 제공하는 PHP wiki에서 애플리케이션에 영향을 줄 수 있는 기타 변경 사항에 대한 설명도 볼 수 있다.



참고자료

교육
  • Wikipedia에서 클로저에 대해 좀 더 살펴보자.

  • PHP For Windows는 Microsoft Windows용 PHP를 지원하는 웹 사이트이며 PHP 확장 또는 기능도 지원하며 다양한 Windows 아키텍처에 대한 특수 빌드도 제공한다.

  • PHP wiki에서 PHP V5.3의 변경 사항에 대한 자세한 설명을 볼 수 있다.

  • PHP V4에서 개발한 코드를 V5로 마이그레이션하는 방법에 대한 자세한 설명은 "A PHP V5 migration guide"에서 볼 수 있다.

  • "Connecting PHP Applications to Apache Derby"에서는 PHP를 Windows에 설치하고 구성하는 방법에 대해 설명한다(일부 단계는 Linux®에 해당됨).

  • developerWorks 튜토리얼 시리즈인 "Learning PHP, Part 1," Part 2Part 3에서 PHP를 사용하여 프로그래밍하는 방법을 볼 수 있다.

  • Planet PHP는 PHP 개발자 커뮤니티 뉴스 소스이다.

  • PHP Manual에서 PHP 데이터 오브젝트 및 그 기능에 대한 정보를 볼 수 있다.

  • Safari Books Online에서는 오픈 소스 기술과 관련된 다양한 리소스를 찾아볼 수 있다.

  • PHP.net은 PHP 개발자들이 주로 이용하는 웹 사이트이다.

  • "Recommended PHP reading list"를 확인하자.

  • developerWorks에 있는 PHP 컨텐츠를 모두 찾아보자.

  • Twitter의 developerWorks 페이지를 살펴보자.

  • IBM developerWorks의 PHP project resources를 활용하여 PHP 기술을 향상시키자.

  • developerWorks 팟캐스트에서 소프트웨어 개발자의 흥미로운 인터뷰와 토론을 확인할 수 있다.

  • PHP를 통해 데이터베이스를 사용하고 있다면 Zend Core for IBM을 살펴보자. 이 환경은 IBM DB2 V9가 지원되는 설치가 간편하고 바로 사용할 수 있는 안정적인 PHP 개발 및 프로덕션 환경이다.

  • developerWorks 기술 행사 및 웹 캐스트를 통해 최신 정보를 얻을 수 있다.

  • IBM 오픈 소스 개발자에게 유익한 컨퍼런스, 기술 박람회, 웹 캐스트 및 기타 행사를 확인하고 참여하자.

  • developerWorks 오픈 소스 영역에서 오픈 소스 기술을 활용하여 개발 작업을 수행하고 이러한 기술을 IBM 제품과 함께 사용하는 데 도움이 되는 사용법 정보, 도구 및 프로젝트 업데이트를 확인할 수 있다.

  • 무료로 제공되는 developerWorks On demand demos를 통해 IBM 및 오픈 소스 기술에 대해 배우고 제품 기능을 익히자.


제품 및 기술 얻기
  • PHPMyAdmin은 Phar 아카이브를 얼마나 쉽게 사용할 수 있는지 보여 주기 위한 예로 사용하기 위해 Phar로 패키징된 잘 알려진 PHP 애플리케이션이다.

  • PHP V5.2.6을 다운로드하자.

  • DVD로 제공되거나 다운로드할 수 있는 IBM 시험판 소프트웨어를 사용하여 후속 오픈 소스 개발 프로젝트를 구현해 보자.

  • IBM 시험판 제품을 다운로드하여 DB2®, Lotus®, Rational®, Tivoli® 및 WebSphere®의 애플리케이션 개발 도구 및 미들웨어 제품을 사용하자.


토론


필자소개

John Mertic은 Kent State University의 컴퓨터 과학과를 졸업했으며, SugarCRM에서 소프트웨어 엔지니어로 근무하고 있다. 여러 오픈 소스 프로젝트에 참여했으며, 특히 PHP 프로젝트에 주력하고 있다. 또한 PHP Windows Installer를 개발 및 유지보수를 수행한다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



 


 


 


이 문서 북마킹 하기

mar.gar.in mar.gar.in naver naver eolin eolin del.icio.us del.icio.us





위로


developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의