http://dalmasian.tistory.com/entry/PHP-%EA%B0%9D%EC%B2%B4-%EC%83%9D%EC%84%B1%EC%9E%90%EC%99%80-%EA%B0%9D%EC%B2%B4-%ED%8C%8C%EA%B4%B4%EC%9E%90



PHP 5 는 개발자로 하여름 클래스를 위해 생성자 메소드를 선언할 수 있게 한다. 생성자 메소드를 가진 클래스들은 새롭게 생성된 객체에서 이 메소드를 초기화 하는데 적당하게 호출해서 객체가 사용되기 전에 필요로 하지 않게 할 것이다.

PHP 4 에서 생성자 메소드는 클래스 자신의 이름과 같은 이름을 가진 클래스 메소드였다. 파생된 클래스로부터 부모 생성자를 호출하는 것이 매우 일반적일 때, PHP 4는 거대한 클래스 계층 주변으로 클래스를 옮기는 성가신 부분을 만들어내는 방법을 택해 작업했다. 만약 클래스가 다른 부모클래스 아래로 귀속하기 위해 옮겨졌을 때, 부모클래스 생성자의 잘 바뀌는 이름과 부모클래스 생성자를 호출하는 파생된 클래스의 코드는 수정될 것이다.

PHP 5 는 __construct()라는 이름으로 불리우는 생성자 메소드를 선언하는 표준방법을 도입하였다. 


Example B-12. using new unified constructors

<?php
class BaseClass
{
   function
__construct
() {
       print
"In BaseClass constructor\n"
;
   }
}

class
SubClass extends BaseClass
{
   function
__construct
() {
      
parent::__construct
();
       print
"In SubClass constructor\n"
;
   }
}

$obj = new BaseClass
();
$obj = new SubClass
();
?>

 

이전 버전과의 호환성을 위해 만약 PHP 5 가 주어진 클래스를 위한 __construct() 함수를 찾지 못한다면 클래스의 이름으로 이루어진 이전 방식의 생성자 함수를 찾을 것이다.

효과적으로 이것은 클래스가 __construct() 라는 이름을 가진 메소드를 가진 경우 이것이 다른 의미론을 위해 쓰일것이라는 의미를 가지고 있는데 호환성 문제를 가진 경우에 한해서만 해당한다.

Destructors

객체를 위해 파괴자를 정의하는 능력을 소유하는 것은 매우 유용할 수 있다. 파괴자는 디버깅을 위해, 데이터베이스의 연결을 끊을 때,기타 다른 여러가지 일을 마무리할 때 로그 메세지를 남길 수 있다. PHP 4에선느 객체 파괴자를 위한 기술이 존재하지 않았지만, PHP가 셧다운을 요청하는 도중에 실행될 등록함수를 위해 이미 지원했다. 

PHP 5 는 자바와 같은 다른 객체지향언어에서와 유사한 개념을 가진 파괴자를 도입하였다. : 객체의 파괴자를 파괴한 객체가 최종적으로 참조되었을때,  어떤 파라미터 값도 받지 않는 __destruct() 라고 이름 붙여진 클래스 메소드는 메모리에서 객체가 해제되기 전에 호출된다.

Example B-13. Destructor

<?php
class MyDestructableClass
{
   function
__construct
() {
       print
"In constructor\n"
;
      
$this->name = "MyDestructableClass"
;
   }

   function
__destruct
() {
       print
"Destroying " . $this->name . "\n"
;
   }
}

$obj = new MyDestructableClass
();
?>

생성자와 같이 부모클래스의 파괴자는 엔진에 의해 명시적으로 호출되지는 않을 것이다. 부모클래스의 파괴자를 실행하기 위해 파생된 클래스에서는 명확하게 파괴자 본문에 parent::__destruct() 를 적어 호출하여야 한다.



%참고% 범위지정연산자  ::

범위지정 연산자(::)는 $this 대신사용할수 있는 연산자 이다
객체에 속한 맴버나 메서드에 접근을 할때 사용할수 있고 클래스를 객체로 생성하지 않고도 접근할수도 있다
그리고 클래스 상수에 접근할때에도 사용된다

더 자세한 내용은 다음에 강좌를 하겠다

self 는 자신이 속한 클래스, parent 는 부모클래스를 의미한다
self 와 parent 는 클래스 내부에서 맴버나 메서드에 접근할때 사용된다




 1
//예제) 범위지정연산자를 이용한 부모(상위)클래스에서 정의한 생성자 함수 호출
 2 <? 
 3 class Parents { 
 4
 5   // 클래스의 생성자 함수
 6   public function __construct(){  echo "부모(상위)클래스에서 정의한 생성자 함수 호출"; } 
 7
 8 } 
 9
10 class Child extends Parents { 
11   
12   // 클래스의 생성자 함수
13   public function __construct(){  
14     
15     // 부모(상위)클래스에서 정의한 생성자 함수 호출
16     parent::__construct();
17
18   } 
19   
20 } 
21
22 // 출력 : 부모(상위)클래스에서 정의한 생성자 함수 호출
23 $Obj_Child = new Child();
24
25 //위 예제는 부모클래스에서 정의한 생성자 함수를 호출해야 하므로 parent:: 를 사용했다
26
27 ?>

설정

트랙백

댓글