PHP OOP에서 매직을 통한 속성 접근

다음으로 살펴볼 매직 메서드는 __get입니다. 이 메서드는 비공개 또는 보호된 속성의 값을 읽으려고 할 때 발동합니다.

어떤 클래스에 __get 메서드를 구현하면, 존재하지 않거나 숨겨진 속성에 대한 모든 접근은 이 메서드에 의해 처리될 것입니다.

이때 PHP는 자동으로 요청된 속성의 이름을 이 메서드의 첫 번째 매개변수로 전달하며, 이 메서드가 반환하는 값은 접근이 발생한 속성의 값으로 인식됩니다.

아직 어떻게 작동하는지 잘 이해가 되지 않을 수 있으므로, 실제 예를 통해 살펴보겠습니다. 비공개 속성과 공개 속성을 가진 다음과 같은 Test 클래스가 있다고 가정해 봅시다:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // 공개 속성
    private $prop2 = 2; // 비공개 속성
  }
?>

우리 클래스에 매직 메서드 __get를 추가해 보겠습니다. 우선은 단순히 접근이 발생한 속성의 이름을 반환하도록 하겠습니다:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // 속성 이름을 반환합니다
    }
  }
?>

만든 매직 메서드의 작동을 확인해 봅시다. 세 가지 유형의 속성에 접근해 보겠습니다: 공개 속성, 비공개 속성, 그리고 존재하지 않는 속성:

index.php<?php
  $test = new Test;
  
  // 공개 속성에 접근:
  echo $test->prop1; // 1을 출력합니다 - 즉, 속성 값
  
  // 비공개 속성에 접근:
  echo $test->prop2; // 'prop2'를 출력합니다 - 속성 이름
  
  // 존재하지 않는 속성에 접근:
  echo $test->prop3; // 'prop3'를 출력합니다 - 속성 이름
?>

보시다시피, 우리의 매직 메서드는 비공개 속성과 존재하지 않는 속성에 대한 접근에 반응하지만, 공개 속성에 대한 접근은 무시합니다. 공개 속성들은 이전과 동일하게 작동합니다.