• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

getter setter 는 private proerty에만 적용되나요?

21.11.22 19:23 작성 조회수 111

0

getter , setter, unset, isset magic method들은 property에 대해서만 작동하는데 private프로퍼티들에만 작동하나요? public으로했을떄 호출이 안되요

답변 1

답변을 작성해보세요.

0

안녕하세요 :)

예를 들어 __get() 를 사용 한다고 해보겠습니다. A 클래스에는 public $publicProp 프로퍼티가 있습니다. 자 이제 A 클래스의 인스턴스를 만들고 외부에서 $publicProp 로 접근한다고 했을 때, PHP 는 $publicProp 가 public 이면 __get() 매직 메서드보다 먼저 접근하도록 합니다. 이는 어쩌면 당연한 결과일 수 있습니다. public 은 애초에 외부에서 접근을 허가한 것이기 때문이죠.

반면 private 는 외부에서 접근이 불가합니다. 외부에서는 private 로 선언된 프로퍼티의 존재를 알아서는 안 됩니다. 그래서 $privateProp 라고 외부에서 접근을 한다고 하더라도 우선적으로는 없는 프로퍼티로 간주하여 __get() 으로 접근하도록 처리합니다.

class A
{
    public $publicProp;

    private $privateProp;

    public function __construct()
    {
        $this->publicProp = "Hello, world";
    }

    public function __get($name)
    {
        return $name;
    }
}

$a = new A();

var_dump( $a->publicProp ); // Hello, world
var_dump( $a->privateProp ); // PrivateProp