소멸자란?
객체지향언어에서는 생성된 객체가 사라질 때 수행해야 할 일을 소멸자(destructor) 내에서 처리하도록 되어 있습니다. 클래스가 상속관계에 있을 때에 각 클래스에 있는 소멸자의 실행순서는 생성자와 반대로 동작하게 됩니다. 즉, 파생클래스의 소멸자가 먼저 실행된 다음에 부모클래스의 소멸자가 순서대로 실행됩니다.
PHP3에서의 소멸자
PHP3에서는 소멸자를 지원하지 않습니다. 따라서 객체를 제거할 때에 수행해야 할 함수가 있다면 이를 수행할 수 있는 함수를 아래와 같이 작성할 수 있습니다.
[code php;gutter:false]
<?php
class test {
function destructor() {
// 여기에 객체를 제거할 때 수행해야할 기능을 추가
}
}
$obj = new test;
.
.
.
$obj->destructor();
unset($obj);
.
.
.
?> [/code]
class test {
function destructor() {
// 여기에 객체를 제거할 때 수행해야할 기능을 추가
}
}
$obj = new test;
.
.
.
$obj->destructor();
unset($obj);
.
.
.
?> [/code]
unset() 함수에 의해 객체는 메모리에서 제거될 것입니다. 그러나 스크립트 종료 직전에는 unset() 함수를 사용할 필요는 없습니다. 스크립트의 실행이 종료되면 객체들도 자동적으로 제거됩니다.
PHP3에서의 소멸자 구현
객체 생성할 때 register_shutdown_function() 함수를 이용해 전역함수를 작성한 후 이 전역함수 내에서 스크립트가 종료될 때 수행될 최하위 파생클래스에 대한 소멸자를 실행하세요.
[code php;gutter:false]
<?php
function __register_destructor() {
global $obj;
$obj->testext_destructor();
}
class test {
// 생성자
function test() {
// 여기에 객체를 생성할 때 수행해야할 기능을 추가
}
// 사용자 정의 소멸자
function test_destructor() {
// 여기에 객체를 제거할 때 수행해야할 기능을 추가
}
}
class testext extends test {
// 생성자
function testext() {
$this->test();
// 여기에 객체를 생성할 때 수행해야할 기능을 추가
}
// 사용자 정의 소멸자
function testext_destructor() {
// 여기에 객체를 제거할 때 수행해야할 기능을 추가
$this->test_destructor();
}
}
$obj = new testext;
register_shutdown_function("__register_destructor");
.
.
.
?> [/code]
function __register_destructor() {
global $obj;
$obj->testext_destructor();
}
class test {
// 생성자
function test() {
// 여기에 객체를 생성할 때 수행해야할 기능을 추가
}
// 사용자 정의 소멸자
function test_destructor() {
// 여기에 객체를 제거할 때 수행해야할 기능을 추가
}
}
class testext extends test {
// 생성자
function testext() {
$this->test();
// 여기에 객체를 생성할 때 수행해야할 기능을 추가
}
// 사용자 정의 소멸자
function testext_destructor() {
// 여기에 객체를 제거할 때 수행해야할 기능을 추가
$this->test_destructor();
}
}
$obj = new testext;
register_shutdown_function("__register_destructor");
.
.
.
?> [/code]
클래스가 상속관계에 있을 때에 각 클래스에 있는 소멸자의 실행순서는 파생클래스의 소멸자가 먼저 실행된 다음에 부모클래스의 소멸자가 순서대로 실행된다는 사실에 주의하세요. 따라서 아래와 같이 현재 클래스의 소멸자에서 처리할 내용을 먼저 수행한 후에 부모클래스의 소멸자를 수행하도록 작성하여야 합니다.
[code php;gutter:false]
function testext_destructor() {
// 여기에 객체를 제거할 때 수행해야할 기능을 추가
$this->test_destructor();
} [/code]
// 여기에 객체를 제거할 때 수행해야할 기능을 추가
$this->test_destructor();
} [/code]
PHP4에서의 소멸자
PHP3와 마찬가지로 소멸자를 지원하지 않습니다.
'phpclass > 클래스활용' 카테고리의 다른 글
{객체지향언어로서의 PHP}6.정적 데이터멤버 (0) | 2000.06.12 |
---|---|
{객체지향언어로서의 PHP}5.정적 멤버함수 (0) | 2000.06.12 |
{객체지향언어로서의 PHP}3.생성자 (0) | 2000.06.12 |
{객체지향언어로서의 PHP}2.함수 재정의 (0) | 2000.06.12 |
{객체지향언어로서의 PHP}1.함수 중복정의 (0) | 2000.06.12 |