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