7. 매직함수

본자료는 예전에 제가 운영하던 사이트에서 발췌한 자료로 현재 사용하는 PHP 버젼과는 상이한 내용이 있을 수 있습니다.
다만 그 개념이 거의 동일하므로 개념정리용으로 이용해 주시고 시간이 나는대로 현재 버젼에서의 사용법도 같이 올려드리겠습니다.

__sleep, wakeup과 같이 ""로 시작하는 매직함수(magic function)는 PHP 클래스 내에서 특수한 목적으로 사용됩니다. 따라서 이 함수들이 가지고 있는 문서화된 매직 기능을 사용할 필요가 없다면 클래스 내에 이 함수들을 정의해서는 안됩니다.

__sleep

serialize 함수를 통해 객체를 직렬화할 때 해당 클래스에 매직 함수 __sleep가 정의되어 있는지 확인합니다. 만약 정의되어 있다면 객체를 직렬화하기 전에 __sleep 함수를 수행합니다. 이 함수는 직렬화하기 전에 객체 멤버에 대하여 조작해야 하는 작업, 또는 직렬화하기 전에 미리 수행해야 하는 작업(예를 들어 데이터베이스 연결 종료 등)을 수행할 수 있습니다. __sleep 함수는 직렬화할 객체의 모든 멤버변수의 이름을 변수에 담아 반환합니다.

class Scott {
  var $error;
  var $svar = array();

  function Scott() {
    $this->svar['Hello'] = "World";
  }

  function __sleep() {
    $this->svar['Hello'] = "Yawn";
    // return list of instance-variables to be serialized
    return array('error', 'svar');
  }
}

$x = new Scott();
print_r($x);
$y = serialize($x);
$z = unserialize($y);
print_r($z);

__wakeup

unserialize 함수를 통해 문자열을 객체화할 때 해당 클래스에 매직 함수 __wakeup가 정의되어 있는지 확인합니다. 만약 정의되어 있다면 객체화하기 전에 __wakeup 함수를 수행합니다. 이 함수를 수행할 때 객체화하기 전에 객체를 상대로 수행해야하는 작업, 또는 객체화하기 전에 미리 수행해야 하는 작업(예를 들어 데이터베이스 연결 등)을 수행할 수 있습니다.

class Scott {
  var $error;
  var $svar = array();

  function Scott() {
    $this->svar['Hello'] = "World";
  }

  function __sleep() {
    $this->svar['Hello'] = "Yawn";
    // return list of instance-variables to be serialized
    return array('error', 'svar');
  }

  function __wakeup() {
    $this->svar['test'] = "I'm here!";
  }
}

$x = new Scott();
print_r($x);
$y = serialize($x);
$z = unserialize($y);
print_r($z);

Table of contents 목차

평점을 남겨주세요
평점 : 5.0
총 투표수 : 1