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>";
?>
간단한 메세지 출력이나 연산은 거친마루님의 방법이 더 효율적일 수 있습니다. 허나 여러줄의 코드에서는 위의 코드가 효율적이라고 생각합니다.

관련자료

등록된 댓글이 없습니다.
Today's proverb
위대한 일을 성취하는 사람은 위대한 고통을 느끼는 사람이다. 고통의 해결은 고통의 감지에서 시작되고, 위대한 고통은 그것을 해결함으로써 인간의 자부심을 드높일 수 있는 위대한 문제이기 때문이다. 따라서 우리는 역설적으로 이렇게 말할 수 있다. 위대한 고통 때문에 아파하는 사람은 축복을 받았다고…. (김광수의 《둥근 사각형의 꿈》중에서)