작성
·
166
답변 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