PHP Magic Method (특수메소드) -- PHP




매직메소드(특수메소드)는 항상 클래스에 정의되어 있는 메소드들을 말하며, 이중 밑줄(__)로 시작한다.
그래서 일반함수들은 이중 밑줄(__)로 함수명을 시작하는 것을 권장하지 않는다.

1) __construct(), __destruct()

__construct()는 클래스에 생성자로 클래스 인스턴스화 시 처음으로 호출한다.
CI에 보면 parent::__construct();를 호출하는 것을 종종 보게 되는데,  __construct()는 상속 시 부모의 생성자를 자동으로 호출하지 않는다.

__destruct()는 클래스의 소멸자로 인스턴스 파괴 시 호출된다.
마찬가지로 상속한 부모의 소멸자는 자동으로 호출하지 않으므로 parent::__destruct()를 호출해야 한다.

class Foo {
    public function __construct() {
    }
    public function __destruct() {
    }    
}

2) __get(), __set()

__get()은 클래스의 프로퍼티 값을 조회했을 때 실행된다.
__set()는 클래스의 프로퍼티 값을 지정했을 때 실행된다.

class Foo {
    $id;
    $name;
    
    public function __get($field) {
        $value =  "";
        if($field == "id") {
            $value = $this->id;
        }
        return $value;
    }
    public function __set($field, $value) {
        if($field == "id") {
            $this->id = $value;
        }
    }
}

$obj = new Foo();
$obj->id= 111;
echo $obj->id;

3) __isset(), __unset()

__isset()은 클래스 내의 프로퍼티를 isset()했을때 실행되는 메소드이다.
__unset()은 클래스 내의 프로퍼티를 unset()했을때 실행되는 메소드이다.

class Foo {
    $id;
    $name;
    
    public function __isset($field) {
        echo "call isset : " . $field;
    }
    public function __unset($field) {
        echo "call unset : " . $field;
    }
}

$obj = new Foo();
isset($obj->id);
unset($obj->id);

4) __call(), __callstatic()

__call()은 클래스에 정의되지 않은 메소드를 호출했을 때 실행되는 함수이다.
__callstatic()은 _call()과 같은 기능이지만 static으로 메소드를 호출했을 때 실행되는 함수이다.

class Foo {
    public function __call($method, $args) {
        echo "unknown method : " . $method;
        return false;
    }
}

5) __toString()

클래스의 인스턴스의 상태를 확인하기 위한 인스턴스의 문자열화를 진행한다.

class Foo {
    $id;
    $name;
    
    public function __toString() {
        return $this->id . " : " . $this->name;
    }
}

$obj = new Foo();
$obj->id = 111;
$obj->name = "tiger";
echo $obj;

6) __debugInfo()

클래스의 인스턴스를 var_dump()했을 때 호출되는 메소드이다.

class Foo {
    $id;
    $name;
    
    public function __construct($id, $name) {
        $this->id = $id;
        $this->name = $name;
    }
    public function __debugInfo() {
        return [
            'id' => $this->id,
            'name' => $this->name
        ];
    }    
}

$obj = new Foo(111, "tiger");
var_dump($obj);

덧글

댓글 입력 영역



20140817_300_250

통계 위젯 (화이트)

5177
1073
1039937