PHP & Others

php 디스트럭터

컨텐츠 정보

본문

http://mse96.com/destructortest.php
 http://mse96.com/function_list.php



전에 한번 디스트럭터를 만들어 보겠다고 글을 올렸다가,
멤버 변수를 쓸 수 없는 이상한 상황이 발생해서 다시 머리 굴려서 만들어 냈습니다.

사용법은 컨스트럭터에서 register_destructor 를 호출하면 됩니다.(8번째줄)
(register_destructor의 소스는 두번 째 링크에서 찾아보세요.)

디스트럭터는 페이지가 끝날 때 자동으로 호출 됩니다. (PEAR를 이용하면, 더 간단하긴 합니다만, PEAR를 못쓰는 상황에서 쓸려고 만들었습니다.)

register_destructor( 디스트럭터 등록할 클래스[ , 메쏘드 이름]) 으로 등록하면 됩니다.
메쏘드 이름을 넣지 않을 경우 __클래스 이름이 디스트럭터 메쏘드로 인식됩니다.

저는 디스트럭터를 이용해서 세마포어 클래스를 만들어 봤습니다. 동시 접근을 제한하는 방법인데요. java를 해보신 분이라면, syncronized 정도로 생각하시면 될 것 같습니다.


 
 

 
 베짱이 참.. 4.10 이상에서만 작동합니다. 02/17 10:33:28 
 
 시엔 PHP5에서는 클래스에 __destruct() 메소드를 선언하면 됩니다. 02/17 12:07:21 
 
 Venzark 콘스터럭터에서 register_shutdown_function(array($this, 'destructor()')); 해주면 디스트럭터 됩니다.
같은 지는 소스를 못봐서 ^^  02/17 14:13:13 
 
 베짱이 헉 놀랍네요. register_shutdown_function 에 함수 이름을 저런 식으로 등록할 수도 있군요.--; 뻘찟했다.ㅜㅜ 02/17 16:00:23 
 
 행복한고니 베짱이// "거친마루" 님 이름으로 검색해보세요. ^^ 02/17 16:55:34 
 
 머니 초보인디요
디스트럭터 가 머하는 건지.. 첨 듣네용.. 간단히 설명좀
부탁드립니다. 02/17 18:08:09 
 
 엽우 머니 // 디스트럭터, 파괴자는 어떤 객체의 인스턴스가 사라질 때,
(스크립트가 끝나거나 함수가 끝날 때 등)
자동으로 호출되는 함수입니다.
예를 들어 데이터베이스 객체를 만든 다음,
연결을 끊는 함수를 디스트럭터로 등록하면 좋겠지요. 02/18 0:26:59 
 
 Venzark 거친마루님은 CREATE_FUNCTION을 이용합니다.
<?
class foo {

function foo() {
register_shutdown_function(array($this, '_foo'));
}
function _foo () {
echo 'this destructor';
}
}

$foo = new foo();
print "일반 출력<br>";
?>
간단한 메세지 출력이나 연산은 거친마루님의 방법이 더 효율적일 수 있습니다. 허나 여러줄의 코드에서는 위의 코드가 효율적이라고 생각합니다.

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
우리가 행복한지의 여부는 우리들 각자가 진짜로 원하는 삶을 향해서 얼마나 당당하게 다가가고 있느냐에 달렸다. 그 채점 또한 저마다의 몫이다. (김한길)