PHP 클래스 매직메소드 __get(), __set() 예제
PHP에는 __get(), __set()이란 특별한 매직메소드가 있습니다. 이 매직메소드의 사용에 대해서 여러 논란이 있기는 하지만, 개인적으로 적절히 사용을 한다면 매우 유용하다고 생각합니다. 매직 메소드를 구현하는 방법은 여러가지이지만 그 중 간단하면서도 유용한 코드 하나를 소개 합니다.
public function __get($name) {
if ( property_exists($this, $name) ) {
return $this->{$name};
}
$method_name = "get_{$name}";
if ( method_exists($this, $method_name) ) {
return $this->{$method_name}();
}
trigger_error("Undefined property $name or method $method_name");
}
public function __set($name, $value) {
if ( property_exists($this, $name) ) {
$this->{$name} = $value;
return;
}
$method_name = "set_{$name}";
if ( method_exists($this, $method_name) ) {
$this->{$method_name}($value);
return;
}
trigger_error("Undefined property $name or method $method_name");
}
보여드린 코드는 이름이 맞는 변수가 있으면 그것을 get 또는 set 하고, 만약 변수가 없지만 get_foobar(), set_foobar()와 같은 메소드가 있으면 그것을 호출하는 방식입니다.
특별한 기능이 필요하지 않다면 위 메소드를 클래스에 넣어두는 것만으로 기본적인 프로퍼티에 대한 get, set 메소드의 구현은 끝나게 됩니다.
만약 프로퍼티 보다 get_foobar(), set_foobar()에 우선을 두어 동작시키고 싶다면 매직메소드 내에서 프로퍼티를 찾는 부분과 메소드를 찾는 부분의 if 문 위치를 서로 바꾸어 주면 됩니다. 이렇게 할 결우 특정한 메소드의 get, set 동작만 특별하게 변형시키고 싶을 때 유용합니다.
윈도우 7 날씨 가젯
윈도우 7에 기본으로 들어있는 가젯 중 날씨 가젯은 정상적으로 동작하지 않습니다. 이 문제는 비스타 때부터 있는 것인데도 아직까지 고쳐지지 않고 있습니다.
이를 해결하기 위해 한동윤님이 새로운 날씨 가젯을 만드셨고, 마이크로소프트 홈페이지를 통해서 쉽게 설치 할 수 있었습니다. 어제 윈도우 7을 다시 설치하고 날씨 가젯을 설치하러 홈페이지에 가 보니 이제 더 이상 가젯 갤러리를 제공하지 않는다고 안내를 하고 있습니다.
어렵게 구글링을 통해서 비교적 최신 버전의 날씨 가젯 파일을 다운로드 할 수 있었습니다. 혹시 필요하신 분이 계실지도 몰라 이곳을 통해 공유 합니다.
