PHP OOP에서 매직을 통한 속성 접근
다음으로 살펴볼 매직 메서드는 __get입니다. 이
메서드는 비공개 또는 보호된 속성의 값을 읽으려고 할 때
발동합니다.
어떤 클래스에 __get 메서드를 구현하면, 존재하지 않거나
숨겨진 속성에 대한 모든 접근은 이 메서드에 의해
처리될 것입니다.
이때 PHP는 자동으로 요청된 속성의 이름을 이 메서드의 첫 번째 매개변수로 전달하며, 이 메서드가 반환하는 값은 접근이 발생한 속성의 값으로 인식됩니다.
아직 어떻게 작동하는지 잘 이해가 되지 않을 수 있으므로,
실제 예를 통해 살펴보겠습니다. 비공개 속성과 공개 속성을 가진
다음과 같은 Test 클래스가 있다고 가정해 봅시다:
<?php
class Test
{
public $prop1 = 1; // 공개 속성
private $prop2 = 2; // 비공개 속성
}
?>
우리 클래스에 매직 메서드 __get를 추가해 보겠습니다.
우선은 단순히 접근이 발생한 속성의 이름을 반환하도록
하겠습니다:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // 속성 이름을 반환합니다
}
}
?>
만든 매직 메서드의 작동을 확인해 봅시다. 세 가지 유형의 속성에 접근해 보겠습니다: 공개 속성, 비공개 속성, 그리고 존재하지 않는 속성:
<?php
$test = new Test;
// 공개 속성에 접근:
echo $test->prop1; // 1을 출력합니다 - 즉, 속성 값
// 비공개 속성에 접근:
echo $test->prop2; // 'prop2'를 출력합니다 - 속성 이름
// 존재하지 않는 속성에 접근:
echo $test->prop3; // 'prop3'를 출력합니다 - 속성 이름
?>
보시다시피, 우리의 매직 메서드는 비공개 속성과 존재하지 않는 속성에 대한 접근에 반응하지만, 공개 속성에 대한 접근은 무시합니다. 공개 속성들은 이전과 동일하게 작동합니다.