foreverk.net
제 목 PHP5의 특징
섬네일
내용

PHP5의 특징과 핵심요소

1. 객체사용의 변화 (Zend Engine II의 객체 지향형 모델)
2. 자바와의 통합가능성
3. PDO
4. PHP5의 그 밖의 다른 기능들

 

1. 객체처리방식의 개선 (Zend Engine II의 객체 지향형 모델)

 

PHP가 기존에 Class를 사용 하였지만 기능이 제한적이었고 객체지향적이라 불리기에는 많은 부분이 부족하였습니다. 지금도 PHP가 객체지향형 언어는 아니지만 시대적 흐름에 의해서 PHP5에서는 객체를 사용하는 기능들을 대폭 개선하였습니다.

대규모의 프로젝트의 경우 객체지향방식을 사용하지 않고 구현하는 게 가능하지만 대규모 프로젝트는 객체 지향형(OO) 방법론에 의존하는 경향이 강합니다.

기능적/기술적 설계를 위한 툴(UML – Unified Modeling Language), 반복적인 문제를 위한 솔루션의 재활용(디자인 패턴), 객체지향형 언어를 이용한 소프트웨어 설계를 위한 빌트-인 메커니즘 등을 제공한다는 점에서, 프로젝트의 규모가 클 수록 객체지향방식의 프로그래밍을 사용하고 있습니다.

 

1) PHP5에서의 객체사용의 변화

 

(1) 생성자와 소멸자 (Constructors And Destructors)
생성자와 소멸자는 각각 클래스의 인스턴스가 처음 생성될 때 그리고 그 인스턴스가 소멸될 때 자동으로 불려지는 메소드이다. php5 이전의 class에서도 생성자가 존재 했었다. class의 이름과 같은 이름의 메소드가 바로 이전 버전의 생성자이다.
그러나 php5 에서는 유일한 이름의 생성자가 사용된다. 이전 버전에서는 class의 이름과 같은 이름의 함수가 class의 생성자로 사용되었다면 이제는 생성자의 이름이 __consturct()인 메소드가 생성자로 선언되게 되는 것이다. 또한 이전에는 존재하지 않았던 소멸자 역시 __destruct() 라는 이름으로 새로이 생겼다.

 

예제 )
class test {
  function __construct($test) {
    $this->test = $test;
    print "생성자";
  }

  function __destruct() {
    print "소멸자";
  }
}

$obj_test = new test(‘생성');
print “test = ".$obj_test->test."";

 

결과 )
생성자
test = 생성
소멸자

 

(2) 접근 제한자 PPP (public/protected/private)
PHP5는 C++, Java와 같은 오브젝트 지향형 언어가 공통적으로 지원하는 PPP (Private/Public/Protected)를 지원합니다.
PPP를 사용하여 접근을 제한함으로서 캡슐화 기능을 더욱 강화 시켰습니다.
PHP이전 버전에서는 멤버변수를 선언할때 var를 이용하였으나, PHP5에서는 멤버 변수를 선언할 때에는 public, protected, private를 사용 하도록 되어 있습니다.

- public : 어디서나 접근 가능한 제한자
- protected : 클래스의 내부에서 사용 가능하다. 그러나 상속될 수 있다.
- private : 클래스 내부에서만 사용 가능하다.
PHP5에서도 var를 사용하는 것이 가능하며 public과 같은 개념으로 사용됩니다.

 

(3) 정적 멤버, 클래스 상수(static, const)
PHP5는 정적 멤버 변수와 클래스 상수를 선언할 수 있습니다.
정적 멤버 변수는 static 키워드를 사용하여 선언이 가능하고 클래스 상수의 경우는 const 키워드를 사용하여 선언 가능합니다. 그리고 const로 선언된 클래스 상수의 경우에는 변수가 아니기 때문에 $가 붙지 않습니다.

예)
class test {
  const c_val = "상수\n";
  public static $s_val = "정적 멤버 변수 1 \n";
  public function f_static() {
    return self::$s_val;
  }
  public function f_set_static() {
    self::$s_val = "정적 멤버 변수 2 \n";
  }
  public function f_view_constant() {
    print self::c_val;
  }
} // end class

$obj = new test();
print $obj->f_static();
print $obj->$s_val; // 접근못함
$obj->f_set_static();
$obj2 = new test();
print $obj2->f_static();
print test::c_val;
$obj->f_view_constant();
print $obj->c_val; // 접근못함

 

결과)
정적 멤버 변수 1
정적 멤버 변수 2
정적 멤버 변수 2
상수

 

(4) 객체의 복사(clon)
객체의 복사가 꼭 필요한 경우에는 새로 추가된 clone 키워드를 사용하여 객체를 명시적으로 복사할 수 있습니다. (예: clone $obj;). 또 클래스에 "__clone()"이라는 이름을 갖는 메소드를 구현할 수도 있습니다. 이 메소드는 복사를 통해 기존 객체 속성의 복제 작업이 완료된 후, 새로 생성된 객체를 대상으로 호출 작업을 수행하는 용도로 사용됩니다. 이러한 콜백(callback) 작업은 꼭 필요한 것은 아니지만, 특정 리소스(특히 파일)의 별도 복제본을 활용하고자 하는 경우에 유용하게 활용할 수 있습니다.

 

예) 
class c_clon {
  static  $instance_counter = 0;
  public $instance;
  function __construct() {
    $this->instance = ++self::$instance_counter;
  }
  function __clone() {
    print “객체 복사 \n";
    $this->instance = ++self::$instance_counter;
  }
  function f_ShowCounter() {
    print "Counter : ".$this->instance."\n";
  }
} // end class
$obj = new c_clon();
$obj->f_ShowCounter();
$clon_obj = clone $obj;
$clon_obj->ShowCounter();

 

결과)
Counter : 1
객체복사
Counter : 2

 

(5) 그밖의 객체와 관련되 PHP5의 특징

인터페이스, abstract 클래스, 메소드. C++와 Java를 포함하는 다양한 언어의 MI 구현 방식과 다이내믹한 성격을 갖는 PHP 환경에서의 적합성을 검토한 끝에, Java 스타일의 인터페이스와 abstract 클래스를 갖는 MI를 구현.
그 외 final 키워드 등 여러 가지 기능이 추가 되었습니다.

출처
참고URL -
작성일 2013-07-06 11:59 조회수 2966
목록