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");
}

 

매직 메소드는 프로그래머에 의해 직접 호출되지 않습니다.

실제로 PHP 는 뒤에서 메소드를 호출합니다.

이것이 바로 매직 메소드 라고 불리는 이유 입니다.

직접 호출되지 않고 프로그래머가 꽤 강력한 일을 할 수 있기 해주기 때문입니다.

 

@property Magic Property Of a Class

매직메소드에 대한 자동 완성은 제공되지 않는다.

@propery 주석을 사용해 자동 완성을 제공할 수 있지만 이러한 작업이 지속적으로 유지되어 합니다.

 

PHP 오류 발생시키기 (Trigger Error)

tigger_error 함수 / 사용자가 오류/경고/알림 메세지를 생성할 수 있게 합니다.

사용자 오류 조건을 트리거하는 데 사용되며 내장 오류 핸들러 또는 새 오류 핸들러 ( set_error_handler () ) 로 설정된 사용자 정의 함수와 함께 사용할 수 있습니다 .

 

참고한 글

PHP 클래스 매직메소드 __get(), __set() 예제

PHP: 클래스 매직메소드 __get(), __set() 문제

Laravel Greatest Trick Revealed: Magic Methods

PHP 꼴랑이거(2) - __get, __set에서 바로 배열 접근.

  • share