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 동작만 특별하게 변형시키고 싶을 때 유용합니다.
PHP를 공부하려고 합니다.
고백합니다. 사실 저는 PHP를 공부한 적이 없습니다.
굳이 한 단어를 더 넣어 자세히 말하자면 '저는 PHP를 제대로 공부한 적이 없습니다.'라고 할 수 있겠습니다.
PHP라는게 있다고 대학교에서 C로 CGI를 프로그래밍 하던 시절 듣기는 했었지만 써 볼 생각은 못 했습니다. 처음 직접 접한 것은 첫 직장에서 웹마스터라는 직책을 맞게 되면서 입니다. PHP 웹사이트 주소 하나 달랑 받아 PHP3로 개발됐던 웹사이트를 유지보수 했던 것이 저와 PHP 인연의 시작입니다.
그 뒤로 꽤 오랬동안 업무에서도 썼고, 개인적으로도 많이 썼지만 제대로 공부를 해 본 적은 없습니다. 그냥 필요한 수준만 뒤적거려 알아내고 사용한 것이 전부입니다. PHP를 주력 언어로 생각하지 않았기 때문인듯 합니다.
그러나 이제 생각이 좀 바뀌어 PHP를 주력으로 한 번 써보려고 합니다. 그래서 앞으로는 꾸준히 PHP를 제대로 좀 공부 해볼 생각입니다. 그리고 이 블로그에 정리하여 올려놓으려고 합니다.
PHP Fest 2011 참가 후기
PHPKorea에서 주관하는 PHP Fest 2011 행사를 지난 주 토요일에 다녀왔습니다. 때 이른 더위에 행사 장소였던 숙명여대까지 가기 쉽지 않았지만 의미있는 시간을 보내고 돌아왔습니다.
이번 행사는 두 개의 트랙(Track)으로 각 트랙별 3개의 강연으로 진행되었습니다. 트랙 간에 자유로운 이동이 가능했지만 저는 관심있는 내용들이 두번째 트랙에 모여있어 개폐회식 때를 빼고 한자리에서 강연을 들을 수 있었습니다.
첫번째 트랙은 CodeIgniter(이하 CI) 프레임워크의 후킹과 보안에 관한 강연이었습니다. 회사에서 사내 프로젝트에 CI를 사용하기도 했었고, 개인적으로 하고 있는 작업에도 CI를 사용하는 중이라 많은 관심이 있었습니다. 후킹은 CI의 URL 처리 방식을 개발자 마음대로 변경시킬 필요가 있을 때 이를 가능하게 해주는 유용한 도구입니다. 그 외에도 CI의 동작 방식을 자유롭게 바꾸기 위해 다양한 응용처가 있을 듯 합니다. 또한 PHP를 안전하게 운영하기 위해 개발자가 직접 신경을 써 주어야 보안 처리를 CI에 맡겨 보다 코딩을 편하게 하면서도 안전한 코드를 만들어 내는 방법에 대해서도 다루었습니다.
두번째 트랙은 요즘 대세인 클라우드에 대한 강연이었습니다. 제목만으로 보았을 때 개발자들에게 도움이 될만한 클라우드 인프라스트럭쳐에 관한 이야기일 것으로 생각했으나, 개략적인 클라우드에 관한 내용이 다루어졌습니다. 개발자들 보다는 클라우드 도입에 대해 고민을 해야 하는 결정권자나 SE 담당자에게 더 적절한 강연으로 느껴집니다. PHP라는 개발 언어 관련 행사와는 조금 떨어진 주제여서 아쉬움이 좀 남습니다.
세번째 트랙은 이클립스 PDT에 관한 강연이었습니다. 개인적으로 vi(m) 사용자이고, 지금도 개발에 vi를 사용하고 있습니다. 하지만 저를 제외한 개발자들은 PDT를 사용하고 있고, PDT를 사용 해보려다 생각했던 개발 방식이 아직 지원되지 않아 다시 vi로 돌아왔던터라 주의 깊에 강연을 들었습니다. 아직 Java만큼의 지원이 되지 않는 PDT지만 짧은 기간 내에 많은 발전을 하고 있는만큼 앞으로 계속 관심을 갖고 실제 업무에 활용토록 노력해야겠다는 생각이 듭니다. 참고로 강연자이신 용영환님이 쓰신 '이클립스 PDT' 책이 이미 출간되어 있으니 이 주제에 관심 있는 분은 참고하시는 것이 좋을 듯 합니다. 일부 내용은 출판사 허락 아래 PHPKorea에도 올라와 있다고 합니다.
PHP 언어가 웹 개발에서 자지하는 비중은 크다고 생각합니다. 하지만 우리나라의 경우 커뮤니티의 힘이 아직 거기에 따라가지 못하는 듯한 인상입니다. PHP Fest와 같은 행사가 좀 더 자주 열릴 수 있으면 좋겠다는 바람입니다.