홈으로 홈으로 | 무료회원가입 | 아이디/비번찾기 | 즐겨찾기
추천음악방송메인홈1대1상담음악방송청취
okTrot(구독해주세요)
앵콜트로트(구독해주세요)
뽕짝아가씨(구독해주세요)
음악가사 검색
온라이브스토어(앱다운로드)
온라이브(방송등록및청취)
비디오 베스트 50
금영노래방
TJ노래방
유튜브 동영상 다운로드
POP Player
신나는 고스톱
컴퓨터 오목
작은 음악다방
운.영.자.1대1.상담
FAQ\지원.프로그램
Q&A\고.객.지.원

자동러시 웹플레이어신청

보안∵서버∵쿠키
윈도우∵프레임
이미지∵배경
시간∵달력∵계산
상태바∵타이틀바
음악∵영상
폼∵전송∵테이블
키보드∵마우스
효과∵링크∵메뉴
Script∵php
기타
PHP 강좌
윈도우관련팁
웹관련팁
홈페이지제작팁
기본강좌
레지스트리
윈도우서버
리눅스서버
Android
PHP5의 새로운 기능
6년 전
1. 소개
만약 PHP 5가 이전 버전(php 3, php 4)처럼 성공할 것인지는 시간이 말해 줄 것이다. 모든 단점의 PHP를 제거하기 위한 목적 바뀐 새로운 특징과 변화는 전세계에서 최고의 웹 스크립트 언어로서 선도적인 위치를 지킬 것이다. 이 책은(이 문서는 PHP 5 Power Programming라는 책의 2장입니다) PHP 5를 다루고 있고, 자세하게 새로운 특징도 있다. 그렇지만, PHP 4에 익숙한 사람들을 위해 PHP 5에서 새로운 점을 알고 싶은 사람을 위해 이 장을 썼다.

2. 언어 특징
새로운 객체 지향 모델
지브 사라스키(Zeev Suraski, 일본인?)가 PHP 3시절에 객체 지향 문법을 추가했을 때, 그것은 객체에 접근하기 위한 문법적인 설탕처럼 추가했다. 객체지향 모델은 상속을 지원했고 메소드와 속성을 둘 다 합치기 위해 클래스를 만들었다. 그러나 그 이상은 아니었다. 지브와 앤디가 php 4를 위한 스크립트 엔진을 다시 작성할 때, 그것은 완전히 새로운 엔진이었고, 보다 빠르게 돌아갔고, 보다 많은 특징에 적합했다. 그렇지만 객체지향 모델은 PHP 3에서 처음 도입되었고, 미숙한 부분이 있었다.
비록 객체 모델이 심각한 한계가 있었지만 그것이 큰 규모의 PHP 어플리케이션으로 전세계에서 확산되어 사용되었다. 그것이 단점에도 불구하고 PHP 4로 OOP 패러다임의 인상적인 사용은 PHP 5 버전을 위한 주요 관심이 되었다.

PHP 3 & 4의 한계가 무엇인가? 가장 큰 단점은 객체의 복사 의미가 네이티브 타임을 위한것과 같다는 사실이다. PHP 개발자에게 어떠한 영향을 미쳤는가? 우리가 변수를 (객체에 대한 참조) 다른 변수에 할당할 때, 객체의 복사는 생성된다. 이것은 강한 성능 뿐만 아니라 php4 어플리케이션에서 버그를 유발한다. 왜냐하면 많은 개발자는 변수

예를 들면

class Person {
    var $name;
    function getName() {
        return $this->name;
    }
    function setName($name) {
        $this->name = $name;
    }
    function Person($name) {
        $this->setName($name);
    }
}

function changeName($person, $name) {
    $person->setName($name);
}

$person = new Person("Andi");
changeName($person, "Stig");
print $person->getName();

  


php4에서 이런 코드는 “Andi”를 출력한다. 이 이유는 우리가 변수로 changeName() 함수에 객체 $person을 넘기고, 그래서, $person은 복사되고 changeName()은 $person의 복사에서 작업한다. 이런 동작은 자바 같은 동작을 기대했던 많은 개발자에게는 직관적이지 않다. 자바에서 변수는 정확이 핸들(또는 포인터)을 객체에 붙들고 있다. 그러므로 그것은 단지 핸들만 복사될 뿐 전체 객체는 복제되지 않는다.

PHP 4에서 사용자는 두가지 부류가 있다, 이런 문제를 인식하는 개발자와 인식하는 개발자이다.

구형 객체 모델은 위에 말한 문제를 유발할 뿐만 아니라 존재하는 객체 모델의 상위에 추가적인 특징을 구현하는데 방해되는 기본적인 문제를 유발하기도 한다.

PHP 5에서, 객체 모델의 기반은 객체 핸들로 다시 작성되었고, 여러분이 clone 키워드를 사용하여 객체의 클론을 명시하지 않는 한, 여러분은 여러분의 객체의 내부에서 절대 만들 지 않는다. PHP5에서 참조로 객체를 넘기는 것이 필요하지 않고 참조로 그것은 할당하지도 않는다.

알아두기:참조로 넘기는 것과 참조로 할당하는 것은 여전히 지원한다. 이경우에 여러분은 변수의 내용을(객체나 다른 타입) 정확히 바꾸기를 원한다.


새로운 객체 지향 특징
새로운 객체지향 특징은 이 절에서 상세히 설명하기에 너무 방대하다. 객체지향 언어 챕터에서 자세히 나와있다.주로 새로운 특징 목록은 밑에 나열해 놓았다.
1. 메소드와 속성을 위한 public/private/protected 접근 수정자

일반적인 OO 접근 수정자의 사용은 메소드나 속성에 접근을 제어하게 해준다. class MyClass {
    private $id;

    public function getId() {
        return $this->id;
    }
}

  


2. 유일(unified) 생성자 이름 __construct()

클래스의 이름이 되는 생성자 대신에, 이제는 __construct()로 선언 된다. 클래스 계층 안에서 클래서의 이동을 쉽게 만든다. class MyClass {
    function __construct() {
        print "생성자 내부";
    }
}

  


3. __destructor() 메소드를 정의함으로서, 객체 소멸자를 지원한다.

객체가 파괴될 때, 실행되던 소멸 함수를 정의가 허락한다. <?
class MyClass {
    function __destruct() {
        print "객체 파괴";
    }
}
?>

  


4. 인터페이스

is-a 관계 보다 완전하게 하기 위한 클래스를 위한 능력을 준다. 클래스는 한 클래스로부터 상속받을 수 있으나 그것이 원하는 것처럼 많은 인터페이스처럼 구현하지는 않는다. interface Display {
    function display();
}

class Circle implements Display {
    function display() {
        print "Displaying circle";
    }
}

  


5. instanceof 연산자

is-a 관계 확인을 위해 언어 수준의 지원. Php4의 is_a() 함수는 지금 비난받는다. if ($obj instance of Circle) {
    print '$obj 은 Circle';
}

  


6. final 메소드

final 메소드 키워드는 여러분이 상속하는 클래스가 그것을 오버로드 할수 없는 것을 표시하는 메소드이다. class MyClass {
    final function getBaseClassName() {
        return __CLASS__;
    }
}

  


7. final 클래스

final로서 클래스를 선언하고, 그것은 상속할 수 없다. 다음과 같은 예제는 에러를 내보인다. final class FinalClass {
}

class BogusClass extends FinalClass {
}

  


8. 명시 객체 복제(cloning)

객체를 복제하기 위해, 여러분들은 clone 키워드를 사용해야 한다. 여러분은 아마 복제 처하는 동안 호출될 __clone() 메소드를 선언했을 것이다. class MyClass {
    function __clone() {
        print "Object is being cloned";
    }
}
$obj = new MyClass(); // 이것은 인스턴스를 만들고
clone $obj;        // 이것은 객체를 복제함

  


9. 클래스 상수

클래스 정의는 상수를 포함 할 수있고, 클래스를 이용하여 참조된다 class MyClass {
    const SUCCESS = "Success";
    const FAILURE = "Failure";
}
print MyClass::SUCCESS;

  


10. 정적 멤버

클래스 정의는 이제 클래스를 통해 접근 가능한 정적 멤버(속성)를 포함 할 수있다. 정적 멤버의 일반적인 사용은 독자 패턴에서 이다. class Singleton {
    static $instance = NULL;
    function getInstance() {
        if ($this->instance == NULL) {
            $this->instance = new Singleton();
        }
        return $this->instance;
    }
}

  


11. 정적 메소드

여러분은 이제 비객체 문맥으로부터 호출되는 것 허락하게하는 정적으로 메소드를 정의할 수 있다. 정적 메소드는 그들이 모든 특정 객체에 묶이지 않고 $this 변수를 정의 하지 않는다. <?
class MyClass {
    static function helloWorld() {
        print "Hello, world";
    }
}
MyClass::helloWorld();
?>

  


12. 추상 클래스

클래스는 인스턴스되는것으로부터 그것을 방해하기 위해 추상으로 선언될 수 있다. 그렇지만, 여러분들은 추상 클래스로부터 상속할 수 있다. abstract class MyBaseClass {
    function display() {
        print "Default display routine being called";
    }
}

  


13. 추상 메소드

메소드가 추상으로 선언되고, 그 때문에 상속하는 클래스에 그 정의를 양보한다. 추상메소드를 포함하는 클래스는 추상으로 선언된다. abstract class MyBaseClass {
    abstract function display();
}

  


14. 클래스 타입 힌트

함수 선언은 파라미터를 위해 클래스 타입 힌트를 포함하기도 한다. 만약 함수가 부적절한 클래스 타입으로 호출되면, 에러가 발생한다. function expectsMyClass(MyClass $obj) {

}

  


15. 메소드에서 리턴되는 역참조(defrferencing)를 지원한다.

PHP 4, 여러분은 메소드로부터 반환되는 객체를 반참조할수 없었다. 여러분은 더미(dummy 변수에 첫 객체를 할당해야하고, 그것을 역참조 한다. PHP 4:

$dummy = $obj->method();
$dummy->method2();

PHP 5:

$obj->method()->method2();

  


16. 반복자(Iterators)

php5는 php 클래스와 php 확장 클래스 둘 다 반복자 인터페이스을 구현하게 해준다. 여러분은 여러분이 foreach() 언어 생성자를 사용으로 클래스의 인스턴스를 반복할수 있을 인터페이스를 구현한다. $obj = new MyIteratorImplementation();
foreach ($obj as $value) {
    print "$value";
}

function __autoload($class_name) {
    include_once($class_name . "php");
}

$obj  = new MyClass1();
$obj2 = new MyClass2();

  


이상 새롭게 강화된 객체지원에 관해 나열했는데, 쉽게 애기하면, 자바만큼 객체를 지원한다. 대략 이런 애기입니다.


다른 새로운 언어 특징
1. 예외 핸들링
PHP 5에서 잘 알고있는 try/throw/catch/ 구조적 예외 처리 개념을 추가했다. 여러분은 Exception 클래스에서 상속한 객체를 던지게(throw) 만들 수 있다. (자바 써 보신 분은 대단히 반가워 할 내용입니다. 이제 if문을 줄이자!) class SQLException extends Exception {
    public $problem;
    function __construct($problem) {
        $this->problem = $problem;
    }
}

try {
    ...
    throw new SQLException("Couldn’t connect to database");
    ...
} catch (SQLException $e) {
    print "Caught an SQLException with problem $obj->problem";
} catch (Exception $e) {
    print "Caught unrecognized exception";
}

  


현재, 이전버전과 호환성 목적을 위해, 대부분의 내부 함수는 예외로 던질 수 없다. 이미 존재하는 set_error_handler()과 비슷하게, 여러분은 스크립트 종료전에 처리할 수 없는 예외를 잡기위해 set_exception_handler()를 사용한다.

2. 참조를 이용한 foreach

php4에서 여러분은 그 배열을 통해 반복하거나 그 변수를 수정할수 없었다. Php5는 ‘&’(reperence) 표시로 foreach() 반복문을 표시함으로서 지원한다. foreach ($array as &$value) {
    if ($value === "NULL") {
        $value = NULL;
    }
}

  


3. 참조 인자를 위한 디폴트 변수

php4에서 디폴트 변수는 변수로 넘겨지는 파라미터만 주어졌다. 참조 파라미터로 넘지겨지는 디폴트 변수를 주는 것은 지금 지원된다. function my_func(&$arg = null) {
    if ($arg === NULL) {
        print '$arg is empty';
    }
}
my_func();

  



3.일반적인 PHP 변화
XML과 웹 서비스
언어에서 다음과 같은 변화로는, php5에서 XML 업데이트는 아마도 중요하고 멋진것이다. Php5에서, 강화된 XML 기능은 다른 언어와 비교해서 동등하거나 따라잡았다.
기반
php4에서 xml지원은 다양한 바탕 XML 라이브러리를 사용하여 구현되었다. SAX 지원은 오래된 Expat 라이브러리를 사용하여 구현 되었고, XSLT는 Sablotron 라이브러리를 사용하여 구현되었고, DOM은 그놈(GNOME) 프로젝트에 의해 보다 강력한 libxml2 라이브러리를 사용하여 구현되었다. 다양한 라이브러리의 사용은 그것이 xml 지원할때 php4를 뛰어나게 만들지 못했다. 관리가 어설펐다(poor). 새로운 XML 표준은 항상 지원되지 않았고, 성능은 그것을 가졌을 때 만큼 좋진 않았고, 다양한 XML 확장 사이에 상호운영성은 존재하지 않았다.

Php 5에서 모든 XML 확장은 suberb libxml2 XML toolkit(http://www.xmlsoft.org)을 사용하여 재작성되었다. 그것은 관리하기 좋고 XML 기술을 php로 가져오는 XML 표준의 효과적인 구현하는 매우 다양한 특징이 있다.
이상 언급한 확장(SAX, DOM 그리고 XSMT)는 지금 새로운 추가 확장 SimpleXML과 SOAP을 포함하는 libxml2를 사용한다.


SimpleXML
아마도 1-2년 전으로 뒤돌아 보면, SimpleXML이 XML 파일로 작업하는 php 개발자에게 혁명임이 명확하다. SimpleXML은 정말 바보(dummies)를 위한 XML로 불려졌다. DOM과 SAX로 처리하는 대신에, SimpleXML은 PHP 객체로서 XML 파일을 보여준다. 여러분은 쉽게 접근하는 요소(elements)와 속성(attributes)를 읽고 작성하거나 반복할 수 있다.
다음 XML 파일을 보자

<clients>
<client>
    <name>John Doe</name>
    <account_number>87234838</account_number>
</client>
<client>
    <name>Janet Smith</name>
    <account_number>72384329</account_number>
</client>
</clients>

  


다음의 코드는 클라이언트 이름과 계좌번호를 출력한다.

$clients = simplexml_load_file('clients.xml');
foreach ($clients->client as $client) {
    print "$client->name has account number $client->account_number ";
}
SimpleXML이 얼마나 간결한지 명백하다.
SOAP
Php4의 공식적인 SOAP지원은 부족했었다. 대부분 일반적이로 사용되는 SOAP 구현은 PEAR이다 그러나 그것은 php에서 전체적으로 구현되었으나, C 확장과 마찬가지로 수행할 수 없었다. 다른 이용 가능한 C 확장은 안정적이지도 널리 채택되지도 않았다. 그러므로 php 5 배포판에 포함되지 않았다.
Php5에서 SOAP 지원은 C 확장으로서 완벽하게 재작성되었고, 비록 그것이 늦은 단계에 완성되었지만, 그것은 표준의 대부분의 구현 때문에, 디폴트 배포판에 협력된다.

다음은 WSDL 파일에서 정의 된 SomeFuncion()을 호출한다


$client = new SoapClient("some.wsdl");
$client->SomeFunction($a, $b, $c);
New MySQLi(MySQL Improved) 확장
Php5를 위해, MySQL AB (http://www.mysql.com)은 MySQL 4.1과 그 이상버전에서, 새로운 기능의 포든 장점을 취하는 새로운 MySQL 확장을 작성했다. 구형 MySQL 확장에 반하여, 새로운 것은 여러분에게 함수형, 객체지향 인터페이스 둘다 사용할 수 있고, 그래서 여러분은 여러분이 좋아하는 것을 선택할 수 있다. 이 확장으로 지원되는 새로운 특징은 다음과 같다.
미리 준비된 문장(Prepared statements), 가변 결속(variable binding), SSL과 압축된 커넥션, 트랜젝션 제어, 복제(replication)…

SQLite 확장
SQLite(http://www.sqlite.org)의 지원은 php 4.3.x에서 처음 도입되었다. 그것은 SQL 서버를 요구하지 않는 내장형 SQL 라이브러리이고 SQL 서버의 규모를 요구하지 않는 어플리케이션에 매우 적합하다. 또는 만약 여러분이 ISP에서 SQL 서버에 접근할 수 없는 경우에도 적합하다. SQLite라는 이름과는 다르게 그것은 매우 다양한 특징과 트랜젝션, sub-select, view 그리고 대규모 DB file을 지원한다. 그것은 php 5버전으로서 언급되었다.
왜냐하면 그것은 php4의 뒤늦게 도입되었고, 객체지향 인터페이스와 반복자를 지원을 제공되면서 php 5의 장점을 취했기 때문이다.

Tidy 확장
Php 5는 유용한 Tidy (http://tidy.sf.net/) 라이브러리를 포함한다 그것은 php 개발자가 HTML 문서를 구문분석, 분류, 청소, 복구하도록 도와준다. Tidy 확장은 함수, 객체지향 인터페이스를 지원하고 그것의 API는 php 5 예외 메커니즘을 사용한다.
펄 확장
기본 php5 패키지에서 포함되지는 않지만, 펄 확장은 여러분이 펄 스크립트를 호출하는 것을 가능하게 한다. 펄 객체를 사용하고 다른 펄 기능을 php에서 사용할 수 있다. 이런 새로운 확장은 PECL (PHP Extension Community Library) 저장소(repository) http://pecl.php.net/package/perl 에 있다. (php가 펄객체를 사용할 수 있다고 합니다)
Php5에서 다른 새로운 것들
새로운 메모리 메니저
젠드 엔진은 새로운 메모리 관리자를 가지고 있다. 두 주요 장점은 멀티 쓰레드 환경을 위한 지원과 각 요청 후에 할당된 메모리 블록은 보다 효율적이다.
윈도우 95 지원의 취소
윈도우 95 플랫폼상에 운영되는 php는 더 이상 지원되지 않는다. 왜냐하면 MS사가 윈도우 95를 공식적으로 지원하지 않을 거라고 했기 떄문에, php 개발 공동체도 그렇게 하기로 결정했다.
추천추천 : 401 추천 목록
번호 제목
3,012
 텍스트 줄바꿈, 글자자르기 CSS
3,011
 jQuery Mobile에서 유용한 코드 10가지.
3,010
 [PHP] dirname()함수와 $_SERVER 관련 상수들
3,009
 [PHP] 파일 크기, 사이즈 불러오는 함수, filesize()
3,008
 [jQuery] jQuery Quick API
3,007
 [ transition ] 링크 hover 색상 변화 속도 조절
3,006
 PHP 5.3.0 에서 사라진 함수들 대체
3,005
 어떤 파일들이 include 나 require 되었는지 확인하는 함수(get_included_files)
3,004
 PHP 날짜 형식 및 계산하기(날짜 더하고 빼기)
3,003
 jQuery Mobile에서 유용한 코드 10가지.
3,002
 값이 배열 안에 존재하는지 확인하는 in_array함수
3,001
 사용자가 웹브라우저에서 뒤로가기를 했을때 감지하는 방법
3,000
 [jQuery]버튼 활성화, 비활성화
2,999
 jQuery show() / hide() / toggle() 사용법
2,998
 jquery 여러가지 이벤트
2,997
 border-radius 속성
2,996
 네이버 오픈API 음성합성 API 사용하는 PHP 샘플코드
2,995
 UTF8 한글 자르기..
2,994
 iconv 에러 발생시 계속 처리하기 옵션
2,993
 [PHP] 현재 페이지의 도메인 , URL 정보 알아내기.
2,992
 [PHP] 막강 기능 배열..
2,991
 [CSS] - Input clear `X ` 버튼 제거 ( IE, Chrome, Firefox )
2,990
 [Mobile] - 모바일웹 Href 태그속성들
2,989
 [JqueryMobile] - 현재화면의 가로세로 사이즈 구하기
2,988
 [JqueryMobile] - 화면의 가로, 세로 사이즈 구하는 방법
2,987
 jquery로 가로 넓이(width), 세로 높이(height) 자동 조절
2,986
 iframe 높이 jquery로 자동조절하기
2,985
 jQuery 오른쪽 영역의 높이를 왼쪽 영역의 높이와 동일하게 하기
2,984
 jquery에서 테이블 짝수, 홀수 번째 TR 배경색 변경하기
2,983
 jquery에서 테이블에 마우스 오버시 해당 행의 배경색상 변경하기
2,982
 jquery 스크립트내 특정값 확인하기 (디버깅)
2,981
 jquery cookie (jquery.cookie.js)
2,980
 jquery div 기본 넓이, 높이 계산 및 padding, border 포함 하기
2,979
 jquery 다른버전 추가 사용시 충돌 방지 (카페24 스마트디자인 기본내장 jquery 1.4.4 버전과 충돌시 해결방법)
2,978
 특정 페이지 종료시 확인 경고창 출력
목록
추천음악방송
인기절정뽕짝파티
인기트로트모음
지루박디스코메들리
밤무대애창곡
전자올겐경음악
앵콜트로트
뽕짝아가씨
작은 음악다방
종합성인가요방
카바레 음악
트롯디스코팡팡
관광 메들리
트롯카페
가요감상실
추억의옛노래
스페셜가요광장
BillBoard Free
Dance&Remix
추천가요모음
경음악.전자올겐
스페셜음악여행
WOLRD POPs
K-POP\BillBoard
JP\CN
POP TOP BEST
K.R.노래방

추천가요\인기
F뮤직 인기\발라드
F뮤직 애창\트로트
트로트성인가요
인기가요
프리미엄 POP
경음악\기타
프리미엄 최신가요
프리미엄 성인가요
가요1번지(종합)
뮤직하우스
동요\연변\반주\기타
가요축제\트롯1번지
댄스\메들리\리믹스
카페\명상\경음악\기타
추천가요\POP\기타
최신가요\인기가요
뮤직트로트 부산광역시부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.