PHP 주요레퍼런스/객체지향 프로그래밍

__set / __get 메소드

웹 개발자의 비상 2011. 10. 24. 17:16
void __set(string name, mixed value)
클래스의 인스턴스가 가진 멤버 변수에 새로운 값을 할당할 때 호출된다.
name 멤버 변수에 value 값을 할당한다.

$time->hour = 22
와 같이 인스턴스가 가진 멤버 변수에 새로운 값을 할당할 경우 __set() 메소드가 정의 되어 있다면 $hour에 22라는 값일 할당되기 전에 호출된다.

mixed __get(mixed name)
클래스의 인스턴스가 가진 멤버 변수를 참조하여 그 값을 얻을 때 호출된다.
name 멤버 변수 값를 반환한다.

echo $time->hour;
와 같이 인스턴스가 가진 멤버 변수를 참조할경우 __get() 메소드가 정의 되어 있다면 반환하기 전에 호출한다.

ex) $time->hour +=25
위와같은 경우 먼저 __get()메소드가 먼저 호출되고 __set() 메소드가 호출된 후에 멤버변수 $time->hour 에 계산값을 설정한다.

<?
class Word {
    private $x = array("num1" => 123, "num2" => 234, "num3" => 345);
    public $y;

    function __get($name) {
        echo "__get(".$name.") 메소드 호출!";
        if (array_key_exists($name, $this -> x)) {
            echo " [성공]\n";
            return $this -> x[$name];
        } else {
            echo " [실패]\n";
            return NULL;
        }
    }

    function __set($name, $value) {
        echo "__set(".$name.", ".$value.") 메소드 호출!";
        if (array_key_exists($name, $this -> x)) {
            echo " [성공]\n";
            $this -> x[$name] = $value;
        } else {
            echo " [실패]\n";
        }
    }
}

$word = new Word();

$word -> data = 26; //__set(data, 26) 메소드 호출! [실패]
$word -> num2 = 235; //__set(num2, 235) 메소드 호출! [성공]
$word -> y = 114; //멤버변수에 $y가 정의 되어 있기 때문에 메소드를 호출하지 않는다.
$word -> num3++; //__get(num3) 메소드 호출! [성공],__set(num3, 346) 메소드 호출! [성공]

var_dump($word);
/* object(Word)#1 (2) {
["x:private"]=>
array(3) {
["num1"]=>
int(123)
 * ["num2"]=>
int(235)
["num3"]=>
int(346)
}
["y"]=>
int(114)
}
 */
?>

 

728x90

'PHP 주요레퍼런스 > 객체지향 프로그래밍' 카테고리의 다른 글

class 상속과 생성자  (0) 2022.07.22
소멸자 __destruct()  (0) 2011.10.24
생성자 __constructor()  (0) 2011.10.24
$this 참조  (0) 2011.10.24
멤버 접근 제한자  (0) 2011.10.24