컨스트럭터와 디스트럭터 (Constructors and Destructors)
Constructor
새롭게 통합된 컨스트럭터 사용 예
출처 : http://breakpoint.tistory.com/107
Constructor
void __construct ([ mixed $args [, $... ]] )
PHP 5 에서는 개발자가 클래스의 컨스트럭터 메소드를 선언할 수 있다. 컨스트럭터메소드를 가진
클래스는 새로운 오브젝트가 생성될때마다 이 메소드를 호출한다. 이 호출에 의해서 오브젝트를 사용하기전에 필요한 초기화를 행할
수 있다.
주의: 자식 클래스가 컨스트럭터를 가지고 있는 경우 부모클래스의 컨스트럭터가 암묵적으로 호출되지 않는다. 부모클래스의 컨스트럭터를 실행하기위해서는 자식 클래스내에서 parent::__construct() 를 호출하여야 한다.
새롭게 통합된 컨스트럭터 사용 예
<?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();
?>
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() 라는 이름의 메소드를 가지고 있으며 다른 용도로 사용되고 있는 경우이다.
Constructor
void __destruct ( void )
PHP 5 에서는 C++ 같은 다른 오브젝트지향언어와 닮은 개념의 디스트럭터가 도입되었다. 디스트럭터메소드는 특정 오브젝트에의 모든 참조(레퍼런스)가 삭제된 직후 도는 오브젝트가 명시적으로 파기된 직후 호출된다. 또는 스크립트의 종료시에도 무작위로 호출된다.
디스트럭터 예
<?php
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "Destroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "Destroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
컨스트럭터와 마찬가지로 부모클래스의 디스트럭터가 엔진에 의해 암묵적으로 호출되지 않는다. 부모클래스의 디스트럭터를 실행하기위해서는 디스트럭터내에서 명시적으로 parent::__destruct() 를 호출하여야 한다.
주의: 스크립트의 셧다운시 디스트럭터가 호출되는 경우 HTTP 헤더는 이미 송신되어 있다. 스크립트의 셧다운시의 작업디렉토리는 SAPI (예를 들어 아파치)에 따라 다르다.
주의: 디스트럭터의 내부에서 (스크립트의 종료처리시에) 예외를 던지려고 하면 치명적인 에러를 일으킨다.
원문링크: http://www.php.net/manual/en/language.oop5.decon.php주의: 디스트럭터의 내부에서 (스크립트의 종료처리시에) 예외를 던지려고 하면 치명적인 에러를 일으킨다.
출처 : http://breakpoint.tistory.com/107
'프로그래밍 > PHP' 카테고리의 다른 글
[기타] cron을 사용하지않고 화일 캐쉬 (0) | 2010.04.23 |
---|---|
아이폰 유저에이전트 (USER_AGENT) (0) | 2010.04.16 |
소켓연결이나 fopen등을 이용할때의 timeout 처리 (0) | 2010.01.22 |
PHP 작업시 도움이 되는 함수 (0) | 2010.01.20 |
PHP 이미지 변환 BMP to JPG (0) | 2009.12.09 |