Bookworm’s Archive 잡동사니 속에 숨겨진 보물 찾기

271/12

Wikipedia, 너 멋지구나

전 이 모습을 보면서 정말 멋있다고 느꼈습니다.

241/12

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 동작만 특별하게 변형시키고 싶을 때 유용합니다.

191/12

윈도우 7 날씨 가젯

윈도우 7에 기본으로 들어있는 가젯 중 날씨 가젯은 정상적으로 동작하지 않습니다. 이 문제는 비스타 때부터 있는 것인데도 아직까지 고쳐지지 않고 있습니다.

이를 해결하기 위해 한동윤님이 새로운 날씨 가젯을 만드셨고, 마이크로소프트 홈페이지를 통해서 쉽게 설치 할 수 있었습니다. 어제 윈도우 7을 다시 설치하고 날씨 가젯을 설치하러 홈페이지에 가 보니 이제 더 이상 가젯 갤러리를 제공하지 않는다고 안내를 하고 있습니다.

어렵게 구글링을 통해서 비교적 최신 버전의 날씨 가젯 파일을 다운로드 할 수 있었습니다. 혹시 필요하신 분이 계실지도 몰라 이곳을 통해 공유 합니다.

윈도우 7 날씨 가젯 다운로드